What Causes The INSERT statement conflicted with the FOREIGN KEY constraint?

前端 未结 2 1372
梦如初夏
梦如初夏 2020-12-16 01:09

This code has worked for me before but i am not sure anymore what has been causing this error. My only guess is that when i try to create a Player, the Team Data is being se

相关标签:
2条回答
  • 2020-12-16 01:15

    You should try to complete entities like teams for your player entity. Especially foreign keys.

    [HttpPost]
        public ActionResult Create(Player model)
        {
            if (ModelState.IsValid)
            {
                using (var db = new EfDb())
                {
                    //Since you have the username cached, you can check the local EF cache for the object before hitting the db.
                    //var userProfile = db.UserProfiles.Single(u => u.UserName == User.Identity.Name);
                    var userProfile = db.UserProfiles.Local.SingleOrDefault(u => u.UserName == User.Identity.Name) 
                                   ?? db.UserProfiles.SingleOrDefault(u => u.UserName == User.Identity.Name);
                    if (userProfile != null)
                    {
                        var player = new Player
                                         {
                                             UserProfile = userProfile,                                             
                                             ....
                                             ....                                              
                                         };  
                        player.TeamId = 5;                      
                        db.Players.Add(player);                          
    
                        db.SaveChanges();
                    }
                }
            }
            PopulateTeamsDropDownList(model.TeamId);
            return View(model);
        }
    

    And make sure the Dropdown from your view is Required and send correct value to the post method.

    0 讨论(0)
  • 2020-12-16 01:26

    The reason behind this is when you are inserting a record on the child table which the value of the referencing column doesn't exist yet on the on the parent table.

    Consider the following scenario:

    // PARENT TABLE
    CREATE TABLE TableA
    (
       ID INT PRIMARY KEY
    );
    
    // CHILD TABLE
    CREATE TABLE TableB
    (
       ID INT PRIMARY KEY,
       TableA_ID INT,
       CONSTRAINT tb_FK FOREIGN KEY (TableA_ID) REFERENCES TableA(ID)
    );
    
    
    // RECORDS OF PARENT TABLE
    INSERT INTO TableA (ID) VALUES (1);
    INSERT INTO TableA (ID) VALUES (2);
    
    // RECORDS OF CHILD TABLE
    INSERT INTO TableB (ID, TableA_ID) VALUES (1,1);
    INSERT INTO TableB (ID, TableA_ID) VALUES (2,1);
    INSERT INTO TableB (ID, TableA_ID) VALUES (3,2);
    

    If you execute the statements above, it will not fail because none of them violates the referential integrity rule.

    Try executing the following statement:

    INSERT INTO TableB (ID, TableA_ID) VALUES (3,4);
    

    It fails because 4 which is the value of TableA_ID to be inserted doesn't exist on Table1.ID. Foreign Keys preserved referential integrity between the records.

    0 讨论(0)
提交回复
热议问题