gpt4 book ai didi

c# - 是什么原因导致 INSERT 语句与 FOREIGN KEY 约束冲突?

转载 作者:可可西里 更新时间:2023-11-01 08:39:42 26 4
gpt4 key购买 nike

这段代码以前对我有用,但我不确定是什么导致了这个错误。我唯一的猜测是,当我尝试创建一个玩家时,团队数据被发送回团队表并试图复制,但由于 TeamId 是唯一的,因此出现此错误。

错误

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Players_dbo.Teams_TeamId". The conflict occurred in database "Web", table "dbo.Teams", column 'TeamId'. The statement has been terminated.

播放器

public class Player
{
...
...

[HiddenInput(DisplayValue = false)]
[ForeignKey("Team")]
public int TeamId { get; set; }

public virtual Team Team { get; set; }

...
}

团队

public class Team
{
[Key]
[HiddenInput(DisplayValue = false)]
public int TeamId { get; set; }

....

public virtual ICollection<Player> Players { get; set; }
}

Controller

//
// GET: /Player/
[HttpGet]
public ActionResult Create()
{
PopulateTeamsDropDownList();
return View();
}

//
// POST: /Player/
[HttpPost]
public ActionResult Create(Player model)
{
if (ModelState.IsValid)
{
using (var db = new EfDb())
{
var userProfile = db.UserProfiles.Single(u => u.UserName == User.Identity.Name);
if (userProfile != null)
{
var player = new Player
{
UserProfile = userProfile,
....
....
};
db.Players.Add(player);

db.SaveChanges();
}
}
}
PopulateTeamsDropDownList(model.TeamId);
return View(model);
}

private void PopulateTeamsDropDownList(object selectedTeams = null)
{
var teamsQuery = from d in _iService.Teams
orderby d.Name
select d;
ViewBag.TeamID = new SelectList(teamsQuery, "TeamId", "Name", selectedTeams);
}

查看

<div class="editor-label">
@Html.LabelFor(model => model.TeamId, "Pick Your Team")
</div>
<div class="editor-field">
@Html.DropDownList("TeamId", String.Empty)
@Html.ValidationMessageFor(model => model.TeamId)
</div>

如何解决这个错误?

最佳答案

这背后的原因是,当您在 child 表中插入一条记录时,该引用列的值在 parent 表中尚不存在.

考虑以下场景:

// 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);

如果执行上面的语句,它不会失败,因为它们都没有违反引用完整性规则。

尝试执行以下语句:

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

失败是因为 Table1.ID 上不存在要插入的 TableA_ID 的值 4。外键保留了记录之间的参照完整性。

关于c# - 是什么原因导致 INSERT 语句与 FOREIGN KEY 约束冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15584278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com