gpt4 book ai didi

asp.net-mvc - 使用 GUID 作为 ASP.NET MVC 数据库中的 ID

转载 作者:行者123 更新时间:2023-12-03 21:47:24 27 4
gpt4 key购买 nike

我正在学习 ASP.NET MVC。我正在关注 asp.net 上的基本教程之一.由于我并不总是严格按照教程进行操作,因此我决定使用 GUID 作为标识列而不是整数。一切正常,直到我开始通过 MVC 应用程序向数据库添加新记录。当我添加新记录时,它插入了一个空白 GUID 而不是生成的 GUID。这是处理插入的代码隐藏段:

[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。任何人都可以向我提供一些关于为什么会这样以及如何解决它的信息吗?

最佳答案

您可以使用自定义 ModelBinder。我在 here 上了解到这些.

public class MyClassBinder : DefaultModelBinder {
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) {
var model = (Movie)base.CreateModel(controllerContext, bindingContext, modelType);
model.id = Guid.NewGuid();
return model;
}
}

你的 Action Controller 将是:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MyAction(Movie movieToCreate) {
// movie should have a new guid in the id
_entities.AddToMovieSet(movieToCreate);
_entities.SaveChanges();
}

您需要在 Global.asax 中注册活页夹:
protected void Application_Start() {
RegisterRoutes(RouteTable.Routes);
ModelBinders.Binders.Add(typeof(Movie), new MyClassBinder());
}

关于asp.net-mvc - 使用 GUID 作为 ASP.NET MVC 数据库中的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1302267/

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