【问题标题】:Simple FluentNHibernate parent/child mapping简单的 FluentNHibernate 父/子映射
【发布时间】:2010-11-25 18:07:42
【问题描述】:

FluentNHibernate 新手 =D

我有一个父/子类如下:

public class Parent
{
    public virtual int ID { get; private set; }
    public virtual string Name { get; set; }
    public virtual IList<Child> Children { get; set; }
}

public class Child
{
    public virtual int ID { get; private set; }
    public virtual string Name { get; set; }
    public virtual Parent ActiveParent { get; set; }
}

具有以下映射:

public ParentMap()
{
    Id(x => x.ID);
    Map(x => x.Name);
    HasMany(x => x.Children)
        .Inverse();
        .Cascade.All();
}

public ChildMap()
{
    Id(x => x.ID);
    Map(x => x.Name);
    //Map(x => x.ActiveParent)
    //  .Column(ParentID);
}

子地图的注释掉的区域是我目前遇到的问题。我希望能够创建一个子对象并调用它的父对象(即 someChild.ActiveParent),但不确定如何通过流利的接口映射它。

子表的表结构包含一个 parentid,目的是在调用时延迟加载父对象。非常感谢任何帮助。

【问题讨论】:

    标签: c# configuration fluent-nhibernate mapping


    【解决方案1】:
    References(x => x.Parent);
    

    【讨论】:

      【解决方案2】:

      除了 mxmissile 的答案之外,您还需要在 References() 调用的末尾添加一个 LazyLoad(),并且您可能希望在配置中执行类似的操作:

      .Mappings(m =>
          m.FluentMappings.AddFromAssemblyOf<ParentMap>()
              .ConventionDiscovery.Add(ForeignKey.EndsWith("ID")))
      

      最后一行指示 Fluent NHibernate 期待名为 ParentID 而不是默认名称 (Parent_Id ?) 的外键,因此您不再需要在每个关系映射中显式指定列名。

      【讨论】:

      • 啊,谢谢你在配置方面的额外说明。我对列映射发生的“魔力”有点不知所措。
      • Fluent NHibernate 有几个其他约定,如果需要,您可以更改/调整。更多细节在这里:wiki.fluentnhibernate.org/Conventions
      猜你喜欢
      • 2011-08-25
      • 1970-01-01
      • 2012-03-14
      • 2010-11-27
      • 2015-09-09
      • 2012-01-21
      • 2014-10-03
      • 2012-06-09
      • 1970-01-01
      相关资源
      最近更新 更多