Entity Framework The ALTER TABLE statement conflicted with the FOREIGN KEY constraint

后端 未结 11 1990
傲寒
傲寒 2021-02-01 00:34

On updating database in Entity Framework , Code first Migration, I am getting this error:

The ALTER TABLE statement conflicted with the FOREIGN KEY constr

11条回答
  •  迷失自我
    2021-02-01 01:14

    I think @Cory was getting you close to the correct solution, you just did not take the time to investigate.

    In add-migration code, the migration probably generated

    public override void Up()
    {
    AddColumn("dbo.ClientContacts", "FamilialRelationshipId", c => c.Int(nullable: false));
    CreateIndex("dbo.ClientContacts", "FamilialRelationshipId");
    AddForeignKey("dbo.ClientContacts", "FamilialRelationshipId", "dbo.FamilialRelationships",        "FamilialRelationshipId");
    }
    

    Notice nullable:false; If your Model had an Id of int instead of int? (nullable int) the migration code will set nullable to false. Your model shows you are using a non-nullable int which defaults to 0, and you probably don't have a foreign key item with a value of 0.

    Now, you will have to either create a default value, that exists in the foreign key table, or Create the Constraint with no check if you are using SQL Server to create the constraint. Remember this though: If you decorate your property with a [DefaultValue(0)] attribute, it won't change the existing data, like a SQL Column Add would, if a default value was specified.

    I recommend you change your Model Class to allow a nullable int. Then, in your seed method, create a simple method against dbcontext to update the new column with a default value, because the [DefaultValue] attribute in data annotations will not modify your data.

    Add-Migration / Update-Database to create the column and constraint. Next, modify your model if you desire to allow for a non-nullable int, and presuming you changed all rows to some valid value for the foreign key, Add-Migration / Update-database again. This gives you an unbroken chain in your model migration. Will come in handy later when you publish to a live site, because the flow of your data model changes will be intact.

    • Hope this helps.

提交回复
热议问题