小编Joh*_*n G的帖子

NHibernate SaveOrUpdate子集合未使用Identity ID更新

我显然遗漏了一些东西(希望很明显),到目前为止我还没跟谷歌好运.

我有一个父子关系映射如下

简化的父图

  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)

.net c# nhibernate fluent-nhibernate

10
推荐指数
2
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

fluent-nhibernate ×1

nhibernate ×1