簡體   English   中英

EntityFramework代碼使用自定義區分符的第一個繼承

[英]EntityFramework Code First inheritance with custom discriminator

我正在嘗試在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

我想要的是生成兩個表。 一個命名為“ Members”,一個命名為“ Fields”,並使用Member -class中的Type -property作為區分符,我敢肯定我只是在做些愚蠢的事情,但我不能終生我想辦法。 因為使用當前代碼,它會在“字段”表中生成一個名為“類型”的列,您顯然不需要該列,因為那將是一個常量。

所以我只是想知道,有人可以告訴我我做錯了什么嗎?

那里有錯字嗎? 您的班級有一個值類型非類型字段。

我從未嘗試過使用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);
}); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM