登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
【翻译】How-To: Using the N* Stack, part 2
【翻译】How-To: Using the N* Stack, part 2
[ 复制链接 ]
些耨努
2025-5-29 20:04:28
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
在上一篇文章当中,我们建立了一个基于 NHibernate 和 Ninject 的 ASP.NET MVC 应用程序,设置了解决方案的结构和一些第三方程序集的引用。
在本篇中,我们将介绍持久化对象模型的建立。持久化对象模型是一组对象,用于我们保存数据到数据库。
注意
:这是一个示例程序,和正确的应用程序结构有很大的差异。正如在 ALT.NET 空间里的大部分高级话题一样,Ayende 有一些关于持久化对象和领域对象的差别的信息。本系列的目的和它们是一样的。
首先,我们建立基于普通旧式CLR对象(POCO)的持久化模型结构。我喜欢在 Visual Studio 的类设计器中做这些事。因为它有助于我们专注在高层的实体和关系上面,而不用徘徊在具体的实现代码上。
以下是我们将要使用的模型图:
首先我们来看下 Course 和 Section 之间的关系。在 Course 类中有一个 ICollection 类型的属性,这个属性和 Section 类是一对多的关系。同样,在 Section 类中也存在一个 Course 属性,和Course 类是多对一的关系。
Code
public class Course
{
public ICollection Sections {
get { }
set { }
}
}
public class Section
{
public Course Course {
get { }
set { }
}
//Other properties here
}
好了,我们建立完了所需要的全部实体类。不过因为我们使用NHibernate,所以这里还有几个小要求:
所有的方法和属性都必须是可重写的,也就是在C#中必须声明为 virtual 。
除非你使用了依赖注入字节码提供者,否则你需要声明一个无参的构造函数。如果你不知道字节码提供者是什么,不用急,我们稍后会介绍的。如果你没有写任何构造函数,也没有错,因为默认会生成出一个无参的构造函数。不过因为 NHibernate 的要求,当你添加一个带有参数的构造函数的时候,也必须要加上一个没有参数的构造函数。
当某些需要用到只读属性的时候,你可以有一些选择。你可以告诉 NHibernate 你的命名约束为后备字段。不过我不喜欢这样,我喜欢将属性设置成可读写的,并且将 setter 设置为 rotected 。如果你刚开始使用 NHibernate 的话,你可能还没有见过这样的情况。
Code
public class Course : Entity
{
private ICollection m_Sections = new HashSet();
public virtual ICollection Sections {
get { return m_Sections; }
protected set { m_Sections = value; }
}
}
我所有的集合属性都是这样设置的。你可以操作集合里的内容,但你不能替换另外一个没有继承此类的实例和重写属性。 如果你要是将这个属性设置成只读的,你就必须在 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 和建立数据库。
示例代码下载:/Files/LeoXing/NStack/NStackExample.Part2.CSHARP.zip
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
翻译
How
To
Using
the
相关帖子
Mac端查词翻译工作流:基于欧路词典与Raycast
[LangGraph]Human-in-the-loop示例之人工干预shell命令执行
PWN手的成长之路-08-not_the_same_3dsctf_2016-溢出+函数调用劫持
【AI翻译】Python 3.14来了,有多快?
C# 使用 using 关键字间接实现只读局部变量的方法
Failed to start nginx.service: Unit nginx.service not found.
[引]Regenerate the SAS key used in HTTP trigger flows
[引]Regenerate the SAS key used in HTTP trigger flows
坐标系:导航系统的 “翻译官”
【强化学习笔记】从数学推导到电机控制:深入理解 Policy Gradient 与 Sim-to-Real。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
Mac端查词翻译工作流:基于欧路词典与Raycast
6
675
移国拱
2025-10-12
业界
[LangGraph]Human-in-the-loop示例之人工干预shell命令执行
2
437
恶凝毛
2025-10-13
安全
PWN手的成长之路-08-not_the_same_3dsctf_2016-溢出+函数调用劫持
2
112
韶侪
2025-10-15
安全
【AI翻译】Python 3.14来了,有多快?
4
707
鞠彗云
2025-10-15
安全
C# 使用 using 关键字间接实现只读局部变量的方法
5
395
东门芳洲
2025-10-17
业界
Failed to start nginx.service: Unit nginx.service not found.
3
234
崔和美
2025-10-23
业界
[引]Regenerate the SAS key used in HTTP trigger flows
2
845
旱由
2025-11-05
业界
[引]Regenerate the SAS key used in HTTP trigger flows
2
529
普料飕
2025-11-05
业界
坐标系:导航系统的 “翻译官”
3
108
凉砧掌
2025-11-14
业界
【强化学习笔记】从数学推导到电机控制:深入理解 Policy Gradient 与 Sim-to-Real。
0
686
稿辏付
2025-12-18
回复
(4)
挚魉
2025-10-25 00:47:00
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
公新蕾
2025-10-25 01:42:17
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
神泱
2025-11-15 07:02:38
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前排留名,哈哈哈
战匈琼
2025-11-30 05:36:26
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
过来提前占个楼
全阳霁
2025-12-6 02:29:31
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
些耨努
2025-12-6 02:29:31
关注
0
粉丝关注
19
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994891
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9982
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
601
OceanBase 在滴滴大规模运维经验以及新功能
967
[CSS+]HTML Learn Data Day 2
92
掌握相关性分析:读懂数据间的“悄悄话”
135
嵌入式UI框架-抗锯齿画圆弧算法
935
嵌入式UI框架的渐变原理、渐变算法
217
日本股票 API 对接实战指南(实时行情与 IP
558
解决Docker磁盘空间告急:认识并清理“悬空
393
别再只会算直线距离了!用“马氏距离”揪出
524
企业进行信息化后,一定会提高效率吗?真相
514
n8n整合ffmpeg
492
从random随机数看验证码重复数字
523
OceanBase 向量索引优化指南
232
Vue2中能否实现输入中文自动转化为拼音, 且
753
从项目成果到职业晋升:项目经理年终总结的
452
JS逆向-混淆加密-识别&还原-Eval&JSFuck&JS
936
2025年上海防水补漏谁家强?长三角标杆企业
615
正式接入DeepSeek-V3.2,国产AI“双剑合壁
398
守嘉陪诊师培训报名热潮引关注 独家实习机
912
顺序表实现线性结构
74
吴恩达深度学习课程四:计算机视觉 第二周