EF没有生成正确的数据库结构,这有点问题。
我有以下代码:
[Table("Email")]
public class Email
{
[Key]
public int EmailID { get; set; }
public EmailAddress From { get; set; }
public String Subject { get; set; }
public String Text { get; set; }
public EmailAddress To { get; set; }
public virtual IEnumerable<EmailAddress> BCC { get; set; }
public virtual IEnumerable<EmailAddress> CC { get; set; }
public virtual IEnumerable<Attachment> Attachments { get; set; }
}
[Table("BookingRequests")]
public class BookingRequest : Email
{
public String Testing123 { get; set; }
}
这并没有奏效,它仍然将Testing123放入电子邮件表中。我想也许是因为我只有一个子类的电子邮件,所以我添加了这个:
[Table("TestingTable")]
public class OtherTest : Email
{
public string OtherVal { get; set; }
}
但我仍然遇到了和以前一样的问题(OtherVal和Testing123),并被困在电子邮件表中。我发现的所有TPT示例都只提到添加Table()属性。
我接受了您的代码并将其添加到我的项目中,该项目使用EF6.1
这就是它创建的迁移:
public override void Up()
{
CreateTable(
"dbo.Email",
c => new
{
EmailID = c.Int(nullable: false, identity: true),
Subject = c.String(),
Text = c.String(),
})
.PrimaryKey(t => t.EmailID);
CreateTable(
"dbo.BookingRequests",
c => new
{
EmailID = c.Int(nullable: false),
Testing123 = c.String(),
})
.PrimaryKey(t => t.EmailID)
.ForeignKey("dbo.Email", t => t.EmailID)
.Index(t => t.EmailID);
}
所以它应该起作用。。。你有使用FluentAPI的代码吗?
EF使用所谓的单表继承(或每层次表),而您希望继承以不同的方式镜像到DB中。这描述了通常使用的三种方式。EF必须实施一个,但它并没有选择你期望的。