EF 6.1不读取Table属性而不生成TPT

时间:2014-04-09 08:43:58

标签: c# sql-server database entity-framework

有一点问题,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()属性。

2 个答案:

答案 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必须实现一个,并且没有选择你期望的那个。