我想知道如何在实体框架中创建映射, 这与流利的nhibernate中的ReferenceAny类似。
我得到了什么:
实体:
public abstract class Document : Entity
{
public virtual ICollection<Feature> Features { get; set; }
}
public class DocumentA : Document
{
}
public class DocumentB : Document
{
}
public class Feature : Entity
{
public IEntity Super { get; set; }
public virtual string Value { get; set; }
}
在要素映射中:
ReferencesAny(x => x.Super)
.EntityTypeColumn("type")
.EntityIdentifierColumn("super")
.AddMetaValue<DocumentA>("DoucmentA")
.AddMetaValue<DokumentB>("DocumentB")
.IdentityType<int>();
在DocumentA映射中:
HasMany<Feature>(x => x.Features)
.AsSet()
.Inverse()
.KeyColumn("super").Not.KeyNullable()
.Where("type = 'DocumentA'")
.Fetch.Join()
.Cascade.AllDeleteOrphan();
在DocumentB映射中:
HasMany<Feature>(x => x.Features)
.AsSet()
.Inverse()
.KeyColumn("super").Not.KeyNullable()
.Where("type = 'DocumentB'")
.Fetch.Join()
.Cascade.AllDeleteOrphan();
这种映射为我提供了清晰的功能表,其中包含列:id,value,type,super, 其中type作为鉴别器,super表示文档id。
如何在EF中映射它以实现具有相同列的Features表,因为我无法更改它?