我正在学习ASP.NET MVC。我正在关注asp.net的基本教程之一。由于我并不总是遵循教程,所以我决定使用GUID作为标识列而不是整数。一切工作正常,直到我通过MVC应用程序添加新记录到数据库。当我添加新记录时,它插入了一个空白的GUID而不是生成的GUID。这里是处理插入代码隐藏的段:使用GUID作为与ASP.NET MVC的数据库中的ID
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude = "id")]Movie movieToCreate)
{
try
{
_entities.AddToMovieSet(movieToCreate);
_entities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
的[Bind(Exclude = "id")]
“线忽略”的ID列,因为它是自动生成。在教程中,ID是自动递增的,但我认为这是因为它是一个整数。我尝试在此方法中添加一行:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude = "id")]Movie movieToCreate)
{
try
{
movieToCreate.id = Guid.NewGuid();
_entities.AddToMovieSet(movieToCreate);
_entities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
但是,ID仍然是空的GUID。任何人都可以向我提供一些信息,说明这是为什么,也许如何解决它?
显然删除'[Bind(Exclude)]'并保留'Guid.NewGuid()'修复了这个问题。我仍然想知道为什么ID自动增加,但GUID不是自动生成的。 – Anders 2009-08-19 19:58:24
这两个值都是在服务器上生成的。但EF只能看到int,因为SQL Server提供程序从服务器返回生成的ints,但没有生成ID。如果你放弃了上下文并重新查询,你会看到两者。 – 2009-08-20 01:57:39
...但不生成ID。 - > ...但不生成GUID。 – 2009-08-20 01:58:17