使用Fluent NHibernate ReferencesAny映射非多态关联

时间:2017-08-29 16:34:03

标签: c# nhibernate fluent-nhibernate polymorphic-associations

假设我们有两个类,每个类实现一个接口,IParent,如下所示:

public class Foo : IParent
{
    public long Id { get; set; }
    ...
    public IList<Child> Children { get; set; }
    ...
}
public class Bar : IParent
{
    public long Id { get; set; }
    ...
    public IList<Child> Children { get; set; }
    ...
}

具有IParent类型的父属性的子类,即父类可以是Foo或Bar:

public class Child
{
    public long Id { get; set; }
    ...
    public IParent Parent { get; set; }
    ...
}

如何使用FluentNHibernate映射此Parent属性?

我发现this question似乎有类似的要求,但没有涉及接口。答案对我来说没有意义,或者在这种情况下似乎适用。

我尝试使用ReferencesAny实现映射,如下所示:

public class ChildMap : ClassMap<Child>
{
    public ChildMap()
    {
        Table("children");
        Id(x => x.Id).GeneratedBy.Assigned();
        ...
        ReferencesAny(x => x.Parent)
            .AddMetaValue<Foo>(typeof(Foo).Name)
            .AddMetaValue<Bar>(typeof(Bar).Name)
            .EntityTypeColumn("parent_name")
            .EntityIdentifierColumn("parent_id")
            .IdentityType<long>()
            .LazyLoad();
    }
}

这在保存时不会导致任何错误,但是没有数据写入数据库中的子表,这让我相信我已经错误地实现了映射。

0 个答案:

没有答案