代码之家  ›  专栏  ›  技术社区  ›  Mark Rogers

当使用Fluent NHibernate自动映射集合时,如何使子级到父级的外键可为null?

  •  0
  • Mark Rogers  · 技术社区  · 15 年前

    如果我有父类:

    public class Parent
    {
        public Parent()
        {
            Children = new List<Child>();
        }
    
        IList<Child> Children {get; private set;}
    }
    

    public class Child
    {
         public SomeThirdClass Friend {get; set;}
    }
    

    每当我让流利的NHibernate的汽车制造商击中这些家伙,它使 Child 类具有不可为null的外键。我已经为某些类修改了一些自动映射约定和一些重写,但是对于这个特定的类对,只有 Parent 类具有重写。重写没有指定如何映射 起源

    在集合的子级中使外键不可为null是默认行为,还是我弄错了什么?

    如何在映射重写类中指定子外键可为null?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Paul Batum    15 年前

    你试过这个吗:

       public class ChildMap : IAutoMappingOverride<Child>
       {
           public void Override(AutoMapping<Child> mapping)
           {
               mapping.References(x => x.OtherThing)
                   .Nullable();
           }
       }
    

       public class NullableFKConvention : IReferenceConvention
       {
           public void Apply(IManyToOneInstance instance)
           {
               instance.Nullable();
           }
       }
    
        2
  •  0
  •   Mark Rogers    15 年前

    我可以通过移除第四个祖辈类的fluent映射,并允许automapper映射该类来解决这个问题。以前,我不允许automapper映射祖父母类,因为我有一个流畅的类映射。fluent映射和auto映射之间的冲突导致Child中的外键不可为null。

    我不能说我完全理解出了什么问题,所以在遵循我的解决方案时要小心。但是我可以说,将Fluent映射和自动映射结合起来肯定会增加调试持久性问题的复杂性。

    另一种解决方法:我又两次遇到这个问题,我注意到如果我打电话 KeyColumn(string columnName) IAutoMappingOverride 对于父类,子类中的外键将默认为Null,而不是notnull。疯了吧?

    推荐文章