我的EF CF Migration正在生成2个额外的字段

时间:2015-07-31 10:22:48

标签: entity-framework ef-migrations

我使用EF Code First Migration。我已经有Request课了,我想添加RequestLinked课程。

这是我的Request课程:

public class Request
{
    [Key]
    public virtual int RequestID { get; set; }
    ...
    public virtual List<RequestLinked> RequestLinkeds { get; set; } <-- ADDED
}

以下是我的新RequestLinked课程:

public class RequestLinked
{
    [Key, Column(Order = 0)]
    public int RequestID { get; set; }
    [Key, Column(Order = 1)]
    public int RequestRelatedID { get; set; }

    public virtual Request Request { get; set; }
    public virtual Request RequestRelated { get; set; }
}

我还在ObjectContext(OnModelCreating)

中添加了一条规则
        modelBuilder.Entity<RequestLinked>()
            .HasRequired(p => p.Request)
            .WithMany(p => p.RequestLinkeds)
            .WillCascadeOnDelete(false);

然后我为这个新添加的模型创建了一个迁移:

Add-Migration AddRequestLinkedTable

问题:生成的(EF迁移)代码创建了太多字段。

    public override void Up()
    {
        CreateTable(
            "dbo.RequestLinkeds",
            c => new
                {
                    RequestID = c.Int(nullable: false),
                    RequestRelatedID = c.Int(nullable: false),
                    Request_RequestID = c.Int(nullable: false),
                    RequestRelated_RequestID = c.Int(),
                })
            .PrimaryKey(t => new { t.RequestID, t.RequestRelatedID })
            .ForeignKey("dbo.Requests", t => t.Request_RequestID)
            .ForeignKey("dbo.Requests", t => t.RequestRelated_RequestID)
            .Index(t => t.Request_RequestID)
            .Index(t => t.RequestRelated_RequestID);
    }

我不明白为什么我会收到Request_RequestIDRequestRelated_RequestID个字段。

请注意,我已在其他项目中执行了相同的步骤,并且生成的迁移计划并未包含这两个额外字段。

有什么想法吗?

非常感谢。

更新

正如3dd所建议的那样,我将RequestRelatedID标记为[ForeignKey(&#34; RequestRelated&#34;)]和[ForeignKey(&#34; Request&#34;)]和RequestID。

现在我得到了以下迁移计划:

    public override void Up()
    {
        CreateTable(
            "dbo.RequestLinkeds",
            c => new
                {
                    RequestID = c.Int(nullable: false),
                    RequestRelatedID = c.Int(nullable: false),
                    Request_RequestID = c.Int(),
                })
            .PrimaryKey(t => new { t.RequestID, t.RequestRelatedID })
            .ForeignKey("dbo.Requests", t => t.RequestID, cascadeDelete: true)
            .ForeignKey("dbo.Requests", t => t.RequestRelatedID, cascadeDelete: true)
            .ForeignKey("dbo.Requests", t => t.Request_RequestID)
            .Index(t => t.RequestID)
            .Index(t => t.RequestRelatedID)
            .Index(t => t.Request_RequestID);

    }

因此,1个额外的字段消失了。那更好但一个仍然......

请注意,在我的Request课程中,我将密钥定义为virtual。我不知道这是否有问题...我试图删除此virtual但仍然是同样的问题。

更新2

最后,我通过调整我的ObjectContext来实现它:

        modelBuilder.Entity<RequestLinked>()
            .HasRequired(p => p.Request)
            .WithMany()
            .WillCascadeOnDelete(false);

0 个答案:

没有答案