2

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ます。ここで本当にばかげたことをしているだけだと確信していますが、私の人生ではできません。それを行う方法。現在のコードでは、「フィールド」テーブルに「タイプ」という名前の列が生成されるため、これは定数であるため、明らかに必要ありません。

だから私はただ疑問に思っています、誰かが私が間違っていることを教えてもらえますか?

4

1 に答える 1

0

そこにタイプミスはありますか?あなたのクラスには、Type ではなく Valuetype というフィールドがあります。

私は JUST 1 マッピングで試したことはありません.2番目のテーブルで試してみてください.

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);
}); 
于 2013-02-03T12:28:07.907 に答える