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 を適切に動作させたいと考えています。
私のマッピングコードは次のようになります
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
私が望むのは、2 つのテーブルを生成することです。「Members」という名前の 1 つと「Fields」という名前の 1 つ、および -class のType
-property を識別子として使用しMember
ます。ここで本当にばかげたことをしているだけだと確信していますが、私の人生ではできません。それを行う方法。現在のコードでは、「フィールド」テーブルに「タイプ」という名前の列が生成されるため、これは定数であるため、明らかに必要ありません。
だから私はただ疑問に思っています、誰かが私が間違っていることを教えてもらえますか?