1

我有以下情况:

带有 db 实体的AssemblyX引用外部assemblyY并将其类用作基类。 如有必要,AssemblyX添加了一些导航属性。

当然,我可以复制所有这些实体并使用 automapper 来解决我的问题,但我有理由继承现有实体。

所以,我在assemblyYFoo {}上课并在assemblyX创建。将流利的自动映射配置为忽略。一切正常。但是assemblyY有另一个实体(由流畅的自动映射覆盖),它具有引用的导航属性。这会导致异常:“来自表 Rab 的关联引用了一个未映射的类:Foo”。Bar: Foo {}Foo (.IgnoreBase<Foo>())RabFoo

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 并创建new Foo具有 Bar 类型的属性,但没有成功。

提前感谢您的任何建议。

4

1 回答 1

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();
于 2014-06-24T11:18:19.897 回答