gpt4 book ai didi

c# - EF在sql表中创建新条目时需要主键

转载 作者:行者123 更新时间:2023-11-29 01:41:32 25 4
gpt4 key购买 nike

所以我们的 edmx 中有许多表,13,我们从现有的 sql 数据库创建的。当我们尝试通过我们构建的 UI 向表中添加新条目时,除了其中 4 个之外,它都失败了。

通过深入研究,我们发现 ModelState 实际上返回的是 false,这是因为我们收到一条错误消息,指出“需要 [PrimaryKeyId] 字段”。当我们添加新数据时某些表工作正常时,我不明白是什么导致了这个问题。

enter image description here

在 edmx 中,我们查看了表的主键的属性,一切似乎都是正确的

enter image description here

我觉得搭建 table 时可能出现问题。我不能确定,我仍在学习 EF 的复杂性。

谁能指出我正确的方向?这会不会是SQL方面的事情(个人认为不是,因为我们已经通过sql脚本在这些表中添加了数据)?会是EF吗?我应该再次破坏 edmx 表并重新添加它们吗?我感到迷茫。感谢您的帮助!

编辑 1

因为我们使用了 Entity Framework 脚手架,所以我们有了基本的方法。这是手动设置一些属性的创建方法。数据库中的主键也是自动递增的。

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Entity entity)
{
if (ModelState.IsValid)
{
_user = GetUser();
entity.CreateDate = DateTime.Now;
entity.LastUpdateDate = DateTime.Now;
entity.LastUpdatedById = _user.Id;
entity.CreatorId = _user.Id;

db.Entities.Add(entity);
db.SaveChanges();
return RedirectToAction("Index");
}

return View(entity);
}

最佳答案

问题已解决!

总结:经过一天的问题和研究解决方案后,结果证明这是非常简单的事情。由于我们正在为 sql 数据库创建条目,因此我们将模型的属性暴露给我们希望用户使用的 View 。

我们收到一个导致 ModelState.IsValid 为假的错误。错误始终相同,“需要 [PrimaryKeyId] 字段”。

解决方案:在我们的 View (.cshtml) 中,我们公开了主键属性但将其标记为隐藏。显然,当您执行此操作时,EF 所做的模型验证/检查必须检查说,大意是说,如果属性在 View 中公开,则将其标记为必需,并且由于它由于被隐藏而永远不会更新,因此它会得到0 上的默认 int 值,作为标识符无效。

代码是这样的

<div class="bg-white content-inner">
@Html.HiddenFor(model => model.PrimaryKeyId)//BAD DO NOT DO THIS
<div class="row-fluid">
<div class="span4">
@Html.LabelFor(model => model.GroupName)
</div>
<div class="span4 offset2">
@Html.TextBoxFor(model => model.GroupName)
@Html.ValidationMessageFor(model => model.GroupName)
</div>
</div>

现在没有模型中的属性,我们得到这个:

没有错误和有效的模型状态! NO ERRORS

VALID MODEL STATE

鉴于我仍在学习 EF 和 MVC,事实证明这是一次艰难的学习经历,但我绝对不会再犯这个错误。希望这可以帮助!

感谢所有给我建议和帮助的人。

关于c# - EF在sql表中创建新条目时需要主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20246341/

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