(数据库优先)uniqueidentifier和MVC =重复键值

时间:2016-09-24 23:02:42

标签: sql asp.net-mvc entity-framework

我在Sql server Management中创建了一个用户表,其中包括主键 Id uniqueidentifier),Name等等。我使用Entity Framework(数据库优先)来访问我的数据库。一切看起来都不错,我可以列出数据(如果我有的话)。

我为“创建”页面创建了一个控制器/视图以添加新用户。第一次创建用户效果很好,但是因为我得到了以下顺序,所以我再也无法添加了用户:

  

违反PRIMARY KEY约束'PK_User'。无法插入重复   键入对象'dbo.User'。重复的键值是   (00000000-0000-0000-0000-000000000000)。声明一直如此   终止。

据我所知,uniqueidentifier每次都应生成一个新的独特的guid id。以下代码基本上就是我写的,只是添加了View。

   public class UserController : Controller {

    UserEntities db = new UserEntities();

    public ActionResult Index() {

        return View(db.Users.ToList());
    }

    [HttpGet]
    public ActionResult Create() {
        return View();
    }

    [HttpPost]
    public ActionResult Create(User user) {
        if (ModelState.IsValid) {
            db.Users.Add(user);
            db.SaveChanges();

            return RedirectToAction("Index");
        }
        return View(user);
    }
}

这是自动生成的代码(数据库优先)

namespace User
{
    using System;
    using System.Collections.Generic;

    public partial class User
    {
        public System.Guid Id { get; set; }
        public string UserName { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
    }
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您正在插入具有相同ID的其他用户。您可以执行以下操作之一:

您可以在模型中使用约束。这样做你的ModelState将无效并且不会存储数据。

您还可以从表单中检查您通过POST发送的值,以查看您是否从表单中发送了Id值。

另一种可能的解决方案是尝试自动递增主键值。 尝试将此添加到您的模型中:

git remote add pc ssh://Username@xxx.xxx.xxx.xxx/Projects
git push pc master

更新: 另一种可能的解决方案:

  1. 打开您的edmx文件。
  2. 右键单击 - >模型浏览器
  3. 右键单击Guid列 - >属性 - >改变了 StoreGeneratedPattern to Identity。