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
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.
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.