Vil*_*lx- 0 nhibernate design-patterns hibernate
我正在用NHibernate创建一个简单的Windows窗体应用程序,我对我应该如何使用它感到有点困惑.引用手册:
ISession(NHibernate.ISession)
表示应用程序与持久性存储之间的对话的单线程,短期对象.包装ADO.NET连接.ITransaction的工厂.保存持久对象的强制(第一级)缓存,在导航对象图或按标识符查找对象时使用.
现在,假设我有以下情况:
我有一个简单的分类器,它是一个MSSQL表,有两列 - ID(auto_increment)和Name(nvarchar).要编辑此分类器,我创建一个包含单个gridview和两个按钮的表单 - "确定"和"取消".用户几乎可以直接在gridview中编辑表格,当他点击OK时,他所做的更改会持久保存到DB(或者如果他点击取消,则没有任何反应).
现在,我有几个关于如何组织这个的问题:
ISession
应该怎样?我应该ISession
为我的整个应用程序创建一个单独的; 每个表单的一个ISession(应用程序是单线程MDI); 或每个数据库操作/事务的ISession?ISession
吗?也就是说,如果我ISession
为每笔交易使用一个单独的,它不会打破脏跟踪吗?我的ISession的生命周期应该是多少?
几个问题解决了这个:
NHibernate是否提供某种内置的脏跟踪或者我自己必须这样做?
NHibernate内置了脏跟踪功能.
这是怎么做到的?
简而言之,EntityEntry在加载实体时保持实体的状态,然后在刷新会话时将此加载状态与实际状态进行比较.具有不同值的字段/属性标记为脏.它实际上比这复杂得多,但作为用户,您不需要确切知道它是如何工作的.
是不是有巨大的开销?
不.如果您在一次会议中管理大量实体(这是您不应该做的事情),这只是一个问题.
它是否与NHibernate的缓存有某种联系?
这些缓存是什么?
它们不是特定于单个ISession吗?也就是说,如果我为每笔交易使用单独的ISession,它会不会打破脏跟踪?
内置脏跟踪如何检测已删除的对象?
您似乎对脏跟踪,缓存和并发性感到困惑.缓存和并发是高度可配置的,这些文章很好地解释了它们:
脏的跟踪行为也可以被覆盖,但默认行为适用于99%的情况.
归档时间: |
|
查看次数: |
212 次 |
最近记录: |