流畅的Nhibernate自动映射。关联引用未映射的基类
我有以下情况: AssemblyX与db实体一起引用外部assemblyY,并将其类用作基类AssemblyX必要时添加一些导航属性 当然,我可以复制所有这些实体并使用automapper来解决我的问题,但我有理由继承现有的实体 因此,我在assemblyY中创建了流畅的Nhibernate自动映射。关联引用未映射的基类,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我有以下情况: AssemblyX与db实体一起引用外部assemblyY,并将其类用作基类AssemblyX必要时添加一些导航属性 当然,我可以复制所有这些实体并使用automapper来解决我的问题,但我有理由继承现有的实体 因此,我在assemblyY中创建了Foo{}类,并在assemblyX中创建了Bar:Foo{}。将fluent自动映射配置为忽略Foo(.IgnoreBase())。一切都很好。但是assembly有另一个实体Rab(由fluent automapping覆盖),该
Foo{}
类,并在assemblyX中创建了Bar:Foo{}
。将fluent自动映射配置为忽略Foo(.IgnoreBase())
。一切都很好。但是assembly有另一个实体Rab
(由fluent automapping覆盖),该实体具有指向Foo
的导航属性。这导致了一个异常:“表Rab中的关联引用了一个未映射的类:Foo”
公共类Foo/.IgnoreBase()-我只需要DB中的派生条
{
公共虚拟Guid Id{get;set;}
}
公共类酒吧:富
{
公共虚拟Guid Id{get;set;}
//一些新特性
}
公共类Rab
{
公共虚拟Guid Id{get;set;}
public virtual Foo Foo//对未映射类的引用,我无法将类型更改为Bar(外部程序集)
}
我怎样才能解决它。我试图继承Rab并创建带有Bar类型的新Foo
属性,但没有成功
提前谢谢你的建议 您可以使用自定义IAutomappingConfiguration来确定应映射的类型或成员:
class MyConfig : DefaultAutomappingConfiguration
{
public override bool ShouldMap(Type type)
{
return !(typeof(Foo)).IsAssignableFrom(type);
}
public override bool ShouldMap(Member member)
{
return !(typeof(Foo)).IsAssignableFrom(member.PropertyType); }
}
然后您可以像这样使用配置:
AutoPersistenceModel model = new AutoPersistenceModel(new MyConfig());
最后:
Fluently.Configure()
.Mappings(m => m.UsePersistenceModel(model))
.BuildSessionFactory();
Fluently.Configure()
.Mappings(m => m.UsePersistenceModel(model))
.BuildSessionFactory();