我是NHibernate的新手,并且一直在尝试使用NuGet来启动和运行它,Fluent NHibernate和NHProf.阅读本文(http://gurustop.net/blog/2011/03/13/nhibernate-3-1-0-on-nuget-important-details)后,似乎不应该直接安装v3.1,但是,v3.2似乎没有这样的警告.
在使用NuGet成功安装NHibernate 3.2和NHProf之后,我无法安装Fluent NHibernate,因为它说"已经引用了更新版本的NHibernate".
此外,当我运行我的应用程序时,我收到以下错误"无法加载文件或程序集'NHibernate.ByteCode.Castle'或其依赖项之一".以下链接(无法在NHibernate中加载文件或程序集)建议安装一些额外的程序集,这是我希望首先使用NuGet避免的.
在这一点上,由于NuGet上的软件包看起来不兼容,因此按照NHForge上的步骤进行操作会更容易吗?
目前的方法
在ASP.NET Web表单应用程序(使用Spring.NET和NHibernate)中,我们有一个聚合根(Person),其详细信息可以在多个屏幕/页面中捕获.的人在进入到该工作流的实体存在,并且对所有变更人对象图是原子的,因此只应在提交最终屏幕的刷新到数据库.
为了实现这一点,我们首次使用NHibernate 3.2将数据库中的Person(懒惰)加载到第一页,然后在我们浏览过程时加载并将序列化的Person对象图保存到HTTP Session变量中.
检索后的人出了HTTP会话,它是从当前的NHibernate会话的分离状态,所以我们重新连接通过调用更新()在当前会话的方法,就像这样:
var sessionPerson = Session[PersonSessionName] as Person;
var currentSession = SessionFactory.GetCurrentSession();
currentSession.Update(sessionPerson);
Run Code Online (Sandbox Code Playgroud)
注意:使用Lock()引发异常,建议"重新关联的对象有脏集".
重新连接时,我们可以按预期遍历对象图,从数据库中提取尚未加载到内存中的子实体的数据.
映射文件的子集
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false" assembly="Domain" namespace=" TestApp.Domain">
<class name="Person" table="Person">
<id name="Id">
<generator class="TestApp.CustomNHibernateHiLoGenerator, TestApp.Core" />
</id>
<property name="Name" not-null="false" />
<bag name="PersonCountries" access="field.camelcase-underscore" cascade="all-delete-orphan">
<key column="PersonId" foreign-key="FK_ PersonCountry_Person" not-null="true" />
<one-to-many class="PersonCountry" />
</bag>
</class>
<class name="Country" table="Country">
<id name="Id">
<generator class="TestApp.CustomNHibernateHiLoGenerator, TestApp.Core" …Run Code Online (Sandbox Code Playgroud)