【问题标题】:EF Requiring primary key when creating a new entry in sql tableEF在sql表中创建新条目时需要主键
【发布时间】:2013-12-13 07:45:47
【问题描述】:

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

进行一些挖掘后,我们发现 ModelState 实际上返回为 false,这是因为我们收到一条错误消息,指出“需要 [PrimaryKeyId] 字段”。我不明白当我们添加新数据时某些表工作正常时会导致此问题的原因。

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

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

谁能指出我正确的方向?这可能是 SQL 方面的问题(个人认为不是因为我们已经通过 sql 脚本在这些表中添加了数据)?会不会是EF?我应该再次炸掉 edmx 表并重新添加它们吗?我感觉很失落。感谢您的帮助!

编辑 1

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

[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 表设计,是否有主键?
  • 在使用 EDMX 时出现这样的问题很常见。只要您在 SQL 中的表在设计上是正确的,只需尝试从您的 edmx 模型中删除有问题的表,然后重新添加它。
  • 所有表都有主键,从edmx中删除并不能解决问题。虽然通常我确实使用@Derek seuggestion 并且 98% 的时间它都有效。遗憾的是,它没有完成这项工作。我会继续做一些研究。其他人有这个问题吗?

标签: c# mysql sql sql-server entity-framework


【解决方案1】:

问题已经解决了!

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

我们遇到了一个错误,导致 ModelState.IsValid 为 false。错误始终相同,“[PrimaryKeyId] 字段是必需的”。

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

这就是代码

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

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

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

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

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

【讨论】:

  • 我遇到了同样的问题。但是,我想知道您的问题的正确解决方案。解决方法是什么?
猜你喜欢
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 2012-01-10
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多