我有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列。
由于
答案 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指令。有什么建议吗?
感谢。