有一点问题,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()属性。
答案 0 :(得分:1)
我把你的代码添加到我的项目中 - 这是使用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的代码?
答案 1 :(得分:0)
EF使用所谓的Single Table Inheritance(或每个层次结构表),而您希望以不同的方式在数据库中镜像继承。 This描述了通常使用的三种方式。 EF必须实现一个,并且没有选择你期望的那个。