我正在尝试在EntityFramework Code First中映射以下继承
public class Member
{
public string ProjectName { get; set; }
public string AssemblyName { get; set; }
public string NamespaceName { get; set; }
public string TypeName { get; set; }
public string Signature { get; set; }
public string DisplayName { get; set; }
public MemberType Type { get; set; }
public string Summary { get; set; }
public bool IsStatic { get; set; }
public bool IsInherited { get; set; }
//public virtual Type ParentType { get; set; } // ignore this
}
public class Field : Member
{
public string ValueType { get; set; }
public bool IsReadOnly { get; set; }
public bool IsVolatile { get; set; }
}
public enum MemberType
{
Constructor,
Field,
Method,
Operator,
Property
}
正如您可能从代码中猜到的那样,我计划在时间上添加更多的Member子类(名为Constructor,Method,Operator和Property),但首先我只想让Field 1正常工作。< / p>
我的映射代码看起来像这样
modelBuilder.Entities<Member>().Configure(config =>
{
config.HasKey(m => new { m.ProjectName, m.AssemblyName, m.NamespaceName, m.TypeName, m.Signature });
config.Property(m => m.DisplayName).IsRequired();
config.ToTable("Members");
});
modelBuilder.Entities<Field>().Configure(config =>
{
config.HasKey(f => new { f.ProjectName, f.AssemblyName, f.NamespaceName, f.TypeName, f.Signature });
});
modelBuilder.Entity<Member>()
.Map<Field>(m =>
{
m.ToTable("Fields");
m.Requires("Type").HasValue((int)Service.DataTypes.MemberType.Field).IsRequired();
}); // note: realy not certain about this one
我想要的是生成两个表。一个名为“Members”,一个名为“Fields”,并使用Type
- Member
- 类中的{{1}} - 属性作为鉴别器,我敢肯定我只是在这里做一些非常愚蠢的事情,但我不能为我的生活弄清楚如何去做。因为使用当前代码,它会在名为“Type”的“Fields”表中生成一个列,您显然不需要该列,因为它是常量。
所以我只是想知道,有人可以告诉我到底我做错了吗?
答案 0 :(得分:0)
那里有错字吗?您的类具有字段Valuetype Not Type。
我从未尝试使用JUST 1映射,请尝试使用第二个表来确保。
modelBuilder.Entity<Member>()
.Map<Field>(m =>
{
m.ToTable("Fields");
m.Requires("ValueType").HasValue((int)Service.DataTypes.MemberType.Field).IsRequired();
})
.Map<SECONDTYPE>(m =>
{
m.Requires("ValueType").HasValue(42);
});