EF 6.1未读取Table属性且未生成TPT



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必须实施一个,但它并没有选择你期望的。

最新更新