我有以下情况:
带有数据库实体的AssemblyX 指的是外部 assemblyY ,并使用其类作为基类。 AssemblyX 添加了一些导航必要时的属性。
当然我可以复制所有这些entites并使用automapper来解决我的问题,但我有理由继承现有的实体。
所以,我在 assemblyY 中有Foo {}
个课程,并在 assemblyX 中创建Bar: Foo {}
。配置流畅的自动化以忽略Foo (.IgnoreBase<Foo>())
。一切都很好。但是 assemblyY 有另一个实体Rab
(由流畅的自动化覆盖),它具有引用Foo
的导航属性。这导致异常:“表Rab中的关联引用了未映射的类:Foo”。
public class Foo // .IgnoreBase<Foo>() - I require only derived Bar in DB
{
public virtual Guid Id {get; set;}
}
public class Bar: Foo
{
public virtual Guid Id {get; set;}
// Some new properties
}
public class Rab
{
public virtual Guid Id {get; set;}
public virtual Foo Foo // reference to unmapped class, I could not change type to Bar (external assembly)
}
我该如何解决?我尝试继承Rab并使用Bar类型创建new Foo
属性,但未成功。
提前感谢任何建议。
答案 0 :(得分:0)
您可以使用自定义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();