Nhibernate 使用UseOverridesFromAssemblyOf不';t调用基类的重写类
我正在使用fluent nHibernate的自动映射,非常简单,如下所示:Nhibernate 使用UseOverridesFromAssemblyOf不';t调用基类的重写类,nhibernate,fluent-nhibernate,automapping,Nhibernate,Fluent Nhibernate,Automapping,我正在使用fluent nHibernate的自动映射,非常简单,如下所示: Fluently.Configure() .Database(MsSqlConfiguration.MsSql2008 .ConnectionString(c => c .Server("(local)\\sql2008") .Database("nHibernate_test")
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(c => c
.Server("(local)\\sql2008")
.Database("nHibernate_test")
.TrustedConnection()))
.Mappings(m => m.AutoMappings.Add(
AutoMap.AssemblyOf<Domain.Airport>(cfg)
.UseOverridesFromAssemblyOf<ReaderMappingOverride>()
))
流利。配置()
.数据库(MsSqlConfiguration.MsSql2008
.ConnectionString(c=>c
.Server(“(本地)\\sql2008”)
.数据库(“nHibernate_测试”)
.TrustedConnection())
.Mappings(m=>m.AutoMappings.Add(
自动装配(cfg)
.UseOverridesFromAssemblyOf()的
))
我的重写类是这样的:
public class ReaderMappingOverride : IAutoMappingOverride<Domain.Reader>
{
public void Override(AutoMapping<Domain.Reader> mapping)
{
//use the reader ID as identifier of the class, instead of the ID field defined in superclass Entity
mapping.IgnoreProperty(r => r.Id);
mapping.Id(r => r.ReaderNumber);
}
}
公共类ReaderMappingGoverride:IAutoMappingOverride
{
公共无效替代(自动映射)
{
//使用读取器ID作为类的标识符,而不是超类实体中定义的ID字段
mapping.IgnoreProperty(r=>r.Id);
Id(r=>r.ReaderNumber);
}
}
其中Reader是一个抽象基类。
如果我为每个子类使用一个单独的重写类,它就可以正常工作。
有没有办法为抽象类的所有子类定义重写
谢谢,约翰尼好的,刚才回答了我自己的问题- 我的问题是,我试图将从Reader类开始的继承权映射到一个表中。但是自动映射会自动忽略所有抽象类。我所做的只是将其添加到配置部分:
.Mappings(m => m.AutoMappings.Add(
AutoMap.AssemblyOf<Domain.Airport>(cfg)
.IncludeBase<Domain.Reader>()
(顺便说一句,Fluent nHibernate网站中给出的示例使用的方法是“type.in(…”,该方法在.net 3.5中不存在…)那很好。
希望这有助于
public override bool IsDiscriminated(Type type)
{
//this line indicates that the readers heirarchy should be all in one table, instead of seperate tables for every type of reader
bool ret = type.IsSubclassOf(typeof(Domain.Reader)) || type == typeof(Domain.Reader) ;
return ret;
}