需要两个单独的表,但EF 6只创建一个

时间:2015-06-24 14:36:05

标签: asp.net-mvc entity-framework

我有一个Contractor类和一个继承Contractor类的Musicians Class。我正在运行迁移,它只会构建一个包含Musicians字段的Contractor表。我想要一个遵循我的域模型的Contractor表和Musicians表。它可以正确创建Instrument表。这是否与我在类上使用继承这一事实有关?

 public class Contractor
{

    public Guid ID { get; set; }
    public string FirstName { get; set; }       
    public string LastName { get; set; }      
    public string Email { get; set; }      
    public string ZipCode { get; set; }        
    public string Phone { get; set; }          
    public string Description { get; set; }
    [DataType(DataType.Date)]
    public DateTime CreateDate { get; set; }
    [DataType(DataType.Date)]
    public DateTime SuspendDate { get; set; }
    public byte[] ImageData { get; set; }
    public string ImageMimeType { get; set; }
    public string ImageName { get; set; }
    public bool Suspended { get; set; }

}

 public class Musician : Contractor
{
    public Guid MusiciansId { get; set; }
    public string WebsiteLink { get; set; }      
    public string YouTubeLink { get; set; }      
    public string SoundCloudLink { get; set; }
    public string  ReverbNationLink { get; set; }
    public int YearsOfExperience { get; set; }
    [DataType(DataType.Date)]
    public DateTime NextDateAvailable { get; set; }

    public Instrument Instrument { get; set; }
    public int InstrumentId { get; set; }

    public Contractor Contractor { get; set; }
    public Guid ContractorId { get; set; }


}

我的迁移脚本:

CreateTable(
            "dbo.Contractor",
            c => new
                {
                    ID = c.Guid(nullable: false),
                    FirstName = c.String(),
                    LastName = c.String(),
                    Email = c.String(),
                    ZipCode = c.String(),
                    Phone = c.String(),
                    Description = c.String(),
                    CreateDate = c.DateTime(nullable: false),
                    SuspendDate = c.DateTime(nullable: false),
                    ImageData = c.Binary(),
                    ImageMimeType = c.String(),
                    ImageName = c.String(),
                    Suspended = c.Boolean(nullable: false),
                    UnionMember = c.Boolean(),
                    MusiciansId = c.Guid(),
                    WebsiteLink = c.String(),
                    YouTubeLink = c.String(),
                    SoundCloudLink = c.String(),
                    ReverbNationLink = c.String(),
                    YearsOfExperience = c.Int(),
                    NextDateAvailable = c.DateTime(),
                    InstrumentId = c.Int(),
                    ContractorId = c.Guid(),
                    Discriminator = c.String(nullable: false, maxLength: 128),
                })
            .PrimaryKey(t => t.ID)
            .ForeignKey("dbo.Contractor", t => t.ContractorId)
            .ForeignKey("dbo.Instrument", t => t.InstrumentId, cascadeDelete: true)
            .Index(t => t.InstrumentId)
            .Index(t => t.ContractorId);

2 个答案:

答案 0 :(得分:0)

在模型类中使用继承不是一个好主意。 您可以为承包商添加类型值,并为每种类型的承包商创建另一个表(例如音乐家):

p

答案 1 :(得分:0)

在做了一些研究之后,答案是:[Table]属性在Musicians类之上。

http://www.codeproject.com/Articles/796521/Inheritance-in-Entity-Framework-Table-Per-Type