加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 07:14:33 所属栏目:asp.Net 来源:网络整理
导读:我正在学习ASP.NET MVC.我正在按照 asp.net的基本教程之一进行操作.由于我并不总是按照教程进行操作,因此我决定使用GUID作为标识列而不是整数.一切正常,直到我通过MVC应用程序向数据库添加新记录.当我添加新记录时,它插入了一个空白GUID而不是生成的GUID.以
我正在学习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;
    }
}

你的行动控制器将是:

[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());
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读