假设我们有两个类,每个类实现一个接口,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();
}
}
这在保存时不会导致任何错误,但是没有数据写入数据库中的子表,这让我相信我已经错误地实现了映射。