我显然遗漏了一些东西(希望很明显),到目前为止我还没跟谷歌好运.
我有一个父子关系映射如下
简化的父图
public sealed class ParentMap : ClassMap<ParentEntity>
{
public ParentMap()
{
Table("Parent");
Component(x => x.Thumbprint);
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.ServeralNotNullableProperties).Not.Nullable();
HasMany(x => x.Children).KeyColumn("ChildId")
.Inverse()
.LazyLoad()
.Cascade
.AllDeleteOrphan();
References(x => x.SomeUnrelatedLookupColumn).Column("LookupColumnId").Not.Nullable();
}
}
Run Code Online (Sandbox Code Playgroud)
简化的儿童地图
public sealed class ChildMap : ClassMap<ChildEntity>
{
public ChildMap()
{
Table("Child");
Component(x => x.Thumbprint);
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.MoreNotNullableProperties).Not.Nullable();
References(x => x.Parent).Column("ParentId").Not.Nullable();
}
}
Run Code Online (Sandbox Code Playgroud)
简化的服务方法步骤
然后我有一个服务方法,它检索Parent并通过一些域方法添加一个新的Child.底层的NHibernate代码归结为:
1)在WCF AfterReceiveRequest(IDispatchMessageInspector)上打开的会话
_sessionFactory.OpenSession();
Run Code Online (Sandbox Code Playgroud)
2)通过.Query检索父项的现有实例
_session.Query<ParentEntity>()
.Where(item => item.Id == parentId)
.Fetch(item => item.SomeLookupColumn) …Run Code Online (Sandbox Code Playgroud)