How-To: Using the N* Stack, part 2
在上一篇文章当中我们建立了一个基于 NHibernate 和 Ninject 的 ASP.NET MVC 应用程序设置了解决方案的结构和一些第三方程序集的引用。在本篇中我们将介绍持久化对象模型的建立。持久化对象模型是一组对象用于我们保存数据到数据库。注意这是一个示例程序和正确的应用程序结构有很大的差异。正如在 ALT.NET 空间里的大部分高级话题一样Ayende 有一些关于持久化对象和领域对象的差别的信息。本系列的目的和它们是一样的。首先我们建立基于普通旧式CLR对象(POCO)的持久化模型结构。我喜欢在 Visual Studio 的类设计器中做这些事。因为它有助于我们专注在高层的实体和关系上面而不用徘徊在具体的实现代码上。以下是我们将要使用的模型图首先我们来看下 Course 和 Section 之间的关系。在 Course 类中有一个 ICollection 类型的属性这个属性和 Section 类是一对多的关系。同样在 Section 类中也存在一个 Course 属性和Course 类是多对一的关系。Code好了我们建立完了所需要的全部实体类。不过因为我们使用NHibernate所以这里还有几个小要求所有的方法和属性都必须是可重写的也就是在C#中必须声明为 virtual 。除非你使用了依赖注入字节码提供者否则你需要声明一个无参的构造函数。如果你不知道字节码提供者是什么不用急我们稍后会介绍的。如果你没有写任何构造函数也没有错因为默认会生成出一个无参的构造函数。不过因为 NHibernate 的要求当你添加一个带有参数的构造函数的时候也必须要加上一个没有参数的构造函数。当某些需要用到只读属性的时候你可以有一些选择。你可以告诉 NHibernate 你的命名约束为后备字段。不过我不喜欢这样我喜欢将属性设置成可读写的并且将 setter 设置为 rotected 。如果你刚开始使用 NHibernate 的话你可能还没有见过这样的情况。Code我所有的集合属性都是这样设置的。你可以操作集合里的内容但你不能替换另外一个没有继承此类的实例和重写属性。 如果你要是将这个属性设置成只读的你就必须在 NHibernate 里配置 m_Sections 使用反射这是一个完全没有必要的操作。我这样的做法更容易而且得到的结果也都是相同的。此外请注意我们是从 Entity 类继承的更多内容请继续关注。接下来我们说说数据库。这些实体类最终都将变成数据库里的表你会将表的主键设置成什么样的呢 Fabio Maulo 有一篇非常好的随笔介绍了不同的 NHibernate 主键策略他在 这篇随笔 中也提到了标示列可能不是主键的最佳选择。那么什么才是最好的选择呢 其实这是个见仁见智的问题。多亏 NHibernate 我不想关注过多的数据库细节所以我喜欢 guid 。你也可以选择你喜欢的或者可以说是数据库管理员喜欢的。现在你打算如何确定对象的主键呢 在我看来这的确是一个持久化细节 – 就是你的对象不应该真正的和它打交道。这就是为什么我们要把它隐藏在基类中请记住我们要从 Entity 类继承。public abstract class Entity{private Guid m_ID;public virtual Guid ID {get { return m_ID; }protected set { m_ID value; }}}这篇讲的就是这么多了在下篇教程里我们将介绍如何配置 NHibernate 和建立数据库。

相关新闻

Flutter Planets测试指南:为行星应用编写Widget测试的完整流程

Flutter Planets测试指南:为行星应用编写Widget测试的完整流程

Flutter Planets测试指南:为行星应用编写Widget测试的完整流程 【免费下载链接】flutter_planets_tutorial The Flutter Planets app tutorial with commits per lesson 项目地址: https://gitcode.com/gh_mirrors/fl/flutter_planets_tutorial Flutter Plan…

2026/7/5 18:37:57阅读更多 →
CANN/asc-devkit多核矩阵乘法缓冲区大小获取

CANN/asc-devkit多核矩阵乘法缓冲区大小获取

MultiCoreMatmulGetTmpBufSize 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: h…

2026/7/5 18:37:57阅读更多 →
CANN算子库TransDataSpecial

CANN算子库TransDataSpecial

TransDataSpecial 【免费下载链接】docs 该仓库用于维护cann公共文档 项目地址: https://gitcode.com/cann/docs 产品支持情况 Ascend 950PR/Ascend 950DT:不支持 Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持 Atlas A2 训练系列产品/Atlas…

2026/7/5 18:37:57阅读更多 →
5个意想不到的直播场景,obs-multi-rtmp如何重塑你的内容分发策略

5个意想不到的直播场景,obs-multi-rtmp如何重塑你的内容分发策略

5个意想不到的直播场景,obs-multi-rtmp如何重塑你的内容分发策略 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 想象一下,你刚刚完成了一场精彩的游戏直播&…

2026/7/5 19:48:10阅读更多 →
STM32G4与ICM-42605实现高精度运动追踪方案

STM32G4与ICM-42605实现高精度运动追踪方案

1. 项目背景与核心需求在当今的嵌入式开发领域,精确追踪物体在三维空间中的运动和方向是一个极具挑战性的任务。无论是无人机飞控、VR/AR设备姿态感知,还是工业机械臂的运动控制,都需要高精度、低延迟的运动追踪方案。传统方案往往面临两个极…

2026/7/5 19:48:10阅读更多 →
Zotero Plugin Template:快速构建专业级Zotero插件的终极指南

Zotero Plugin Template:快速构建专业级Zotero插件的终极指南

Zotero Plugin Template:快速构建专业级Zotero插件的终极指南 【免费下载链接】zotero-plugin-template A plugin template for Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-plugin-template Zotero Plugin Template是一个专为Zotero设计的…

2026/7/5 19:48:10阅读更多 →
DRAM价格暴涨成数字经济风险,AMD、苹果等多企探索内存优化新路径

DRAM价格暴涨成数字经济风险,AMD、苹果等多企探索内存优化新路径

当前,数据中心正面临新危机当前,数据中心正面临一场新危机——不是算力不够,而是内存太贵。近年来,随着大模型推理、内存数据库、高性能计算等AI业务的规模化快速扩张,数据中心正被推向内存资源的临界点。曾经作为服务…

2026/7/5 19:48:10阅读更多 →
智能汽车安全攻防:Security-Paper项目中的特斯拉安全漏洞分析

智能汽车安全攻防:Security-Paper项目中的特斯拉安全漏洞分析

智能汽车安全攻防:Security-Paper项目中的特斯拉安全漏洞分析 【免费下载链接】security-paper (与本人兴趣强相关的)各种安全or计算机资料收集 项目地址: https://gitcode.com/gh_mirrors/se/security-paper 智能汽车安全攻防是当前网…

2026/7/5 19:48:10阅读更多 →
从CIFAR到ImageNet:RobustBench支持的数据集与威胁模型全解析

从CIFAR到ImageNet:RobustBench支持的数据集与威胁模型全解析

从CIFAR到ImageNet:RobustBench支持的数据集与威胁模型全解析 【免费下载链接】robustbench RobustBench: a standardized adversarial robustness benchmark [NeurIPS 2021 Benchmarks and Datasets Track] 项目地址: https://gitcode.com/gh_mirrors/ro/robustb…

2026/7/5 19:43:09阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →