【问题标题】:How to save objects with fluent nhibernate如何使用流畅的 nhibernate 保存对象
【发布时间】:2011-04-15 22:52:08
【问题描述】:

您好,我对如何使用流畅的 nhibernate 保存对象感到困惑。

假设我有一个类 Foo,它与 ChildFoo 具有一对多的关系。

表 foo 有 id 和 name。表 ChildFoo 的 sourceID 与 foo 实体的 id 匹配。

映射将如下所示。

class Foo 
{
   public virtual ID {get;set;}
   public IList<FooChild> Components{get;set;}
}

映射看起来像这样

public FooMap : ClassMap<FooMap> 
{
   public FooMap()
   {
      HasMany(x => x.Components).KeyColumn("SourceID");
   }
}

现在,当我想用​​一些组件集合保存 FooMap 时,我如何告诉 fluent nhibernate 保存我创建的实体(一个类 foo,其中存储在组件列表中的一堆 Foo 子级),而不需要我手动保存每个组件。

谢谢。

【问题讨论】:

    标签: c# .net fluent-nhibernate fluent


    【解决方案1】:

    您希望将 HasMany 映射更改为以下内容:

    HasMany(x => x.Components).KeyColumn("SourceID").Inverse().Cascade.All();
    

    此外,您的映射似乎不正确。应该是这样的:

    public FooMap : ClassMap<Foo> 
    {
       public FooMap()
       {
          Id(x => x.ID, "SourceID");
          HasMany(x => x.Components)
             .KeyColumn("SourceID")
             .Inverse()
             .Cascade.All();
       }
    }
    

    【讨论】:

    • 你确定我必须做 Inverse() 吗?不是有反作用吗?我可以按照你说的做,但没有调用 Inverse() 方法
    • 对于你想要的行为,我认为你确实想要这个。不,不完全是。请阅读此article 以获取有关 Inverse 对 HasMany 关系所做的更多详细信息。 Fluent Wiki 上的描述有些不清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2010-10-12
    • 2010-10-06
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多