实体框架代码首先迁移后的外来列

时间:2015-12-01 15:22:42

标签: c# entity-framework code-first ef-migrations

    [Table("IpForeclosureActionHeaders")]
    public class ForeclosureActionHeader : FullAuditedEntity
    {
        // removed other properties for clarity

        [ForeignKey("BankId")]
        public virtual Bank Bank { get; set; }
        public virtual int BankId { get; set; }

        [ForeignKey("AssignedToBankId")]
        public virtual Bank AssignedToBank { get; set; }
        public virtual int AssignedToBankId { get; set; }

    }

    [Table("IpBanks")]
    public class Bank : FullAuditedEntity
    {
         // removed other properties for clarity

        public virtual ICollection<ForeclosureActionHeader> ForeclosureActionHeaders { get; set; }

        public virtual ICollection<ForeclosureActionHeader> AssignedToBankForeclosureActionHeaders { get; set; }
    }

迁移文件:

public override void Up()
        {
            CreateTable(
                "dbo.IpForeclosureActionHeaders",
                c => new
                {
                    Id = c.Int(nullable: false, identity: true),

                    BankId = c.Int(nullable: false),
                    AssignedToBankId = c.Int(nullable: false),
                    Bank_Id = c.Int(),
                    Bank_Id1 = c.Int(),
                },
                annotations: new Dictionary<string, object>
                {
                    {
                        "DynamicFilter_ForeclosureActionHeader_SoftDelete",
                        "EntityFramework.DynamicFilters.DynamicFilterDefinition"
                    },
                })
                .PrimaryKey(t => t.Id)
                .ForeignKey("dbo.IpBanks", t => t.Bank_Id)
                 .ForeignKey("dbo.IpBanks", t => t.Bank_Id1)
                .ForeignKey("dbo.IpBanks", t => t.AssignedToBankId, cascadeDelete: false)
                .ForeignKey("dbo.IpBanks", t => t.BankId, cascadeDelete: false)
                 .Index(t => t.BankId)
                .Index(t => t.AssignedToBankId)
             .Index(t => t.Bank_Id)
             .Index(t => t.Bank_Id1)

        }

        public override void Down()
        {
            DropForeignKey("dbo.IpForeclosureActionHeaders", "BankId", "dbo.IpBanks");
            DropForeignKey("dbo.IpForeclosureActionHeaders", "AssignedToBankId", "dbo.IpBanks");
            DropForeignKey("dbo.IpForeclosureActionHeaders", "Bank_Id1", "dbo.IpBanks");
            DropForeignKey("dbo.IpForeclosureActionHeaders", "Bank_Id", "dbo.IpBanks");
            DropIndex("dbo.IpForeclosureActionHeaders", new[] { "Bank_Id1" });
            DropIndex("dbo.IpForeclosureActionHeaders", new[] { "Bank_Id" });
            DropIndex("dbo.IpForeclosureActionHeaders", new[] { "AssignedToBankId" });
            DropIndex("dbo.IpForeclosureActionHeaders", new[] { "BankId" });
            DropTable("dbo.IpForeclosureActionHeaders",
                removedAnnotations: new Dictionary<string, object>
                {
                    { "DynamicFilter_ForeclosureActionHeader_SoftDelete", "EntityFramework.DynamicFilters.DynamicFilterDefinition" },
                });
        }
    }

enter image description here

问:您能告诉我为什么它会在Bank_Id表格中创建Bank_Id1IpForeclosureActionHeaders列吗? B'cose我已将这些列命名为BankIdAssignedToBankId。我怎么能避免呢?提前致谢。

1 个答案:

答案 0 :(得分:3)

您可以阅读此主题 - 它的情况大致相同:Why is EF code-first generating an extraneous foreign key column?

InverseProperty将帮助您避免这种不必要的引用。

解决方案:

    [ForeignKey("BankId")]
    [InverseProperty("ForeclosureActionHeaders")]
    public virtual Bank Bank { get; set; }
    public virtual int BankId { get; set; }

    [ForeignKey("AssignedToBankId")]
    [InverseProperty("AssignedToBankForeclosureActionHeaders")]
    public virtual Bank AssignedToBank { get; set; }
    public virtual int AssignedToBankId { get; set; }