如何在没有鉴别器类型列的流畅NH中进行继承

时间:2011-06-07 23:07:07

标签: nhibernate fluent-nhibernate nhibernate-mapping

我有2个班级:

public class MyBaseClass
{
    public virtual int Id  { get; set; }
    public virtual string BaseProperty { get; set; }
}

public class MyClass : MyBaseClass
{
    public virtual string ChildProperty { get; set; }
}

我想将每个人映射到自己的表(流利的NH)。怎么做没有添加到[MyBaseClass]表的鉴别器类型列?所以我希望[MyBaseClass]表只包含BaseProperty和Id列,MyClass包含Id,BaseProperty和ChildProperty列。

由于

2 个答案:

答案 0 :(得分:0)

您可以尝试将IgnoreBase放在MyBaseClass上。它会说FNH独立地映射这些类

答案 1 :(得分:0)

我刚刚找到了这个(http://wiki.fluentnhibernate.org/Fluent_mapping#Components):

public class Parent
{
  public int Id { get; set; }
  public string Name { get; set; }
}

public class Child : Parent
{
  public string AnotherProperty { get; set; }
}
     

如果您想将此映射为   table-per-subclass,你会这样做的   这样:

public class ParentMap : ClassMap<Parent>
{
  public ParentMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);
  }
}

public class ChildMap : SubclassMap<Child>
{
  public ChildMap()
  {
    Map(x => x.AnotherProperty);
  }
}

所以看起来这种方法不需要任何Db更改,比如在我的表中添加特殊字段。唯一的问题是我不知道如何在使用Override语句的AutoMapping中做同样的事情。我们以这种方式进行映射:

public class AutoMappingConfiguration : DefaultAutomappingConfiguration
{
    public override bool IsDiscriminated(Type type)
    {
        return true;
    }

    public override bool ShouldMap(Type type)
    {
        return type.In(typeof(MyBaseClass),typeof(MyClass),...)
    }
...
}

FluentNHibernate.Automapping.AutoPersistenceModel Instance =
            AutoMap.AssemblyOf<MyBaseClass>(new AutoMappingConfiguration())             
    .Override<MyBaseClass>(m =>
{
        ...
    }
}

所以我不确定如何在我的情况下应用SubClass指令。有什么建议吗?

感谢。