【问题标题】:How do I add a new entity that has a property which references an entity that is already created in a database?如何添加具有引用已在数据库中创建的实体的属性的新实体?
【发布时间】:2011-06-10 16:58:07
【问题描述】:

我有一个Project 表和一个Organization 表。

ProjectOrganization 具有多对一关系。

Project 有一个标量属性OrganizationName 引用Organization 中的主键Name

我有一个对Project 模型进行强类型化的创建视图。

我像这样收集Project.Organization.Name 属性的输入:

<div class="editor-label">
        @Html.Label("Organization Name")
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Organization.Name)
        @Html.ValidationMessageFor(model => model.Organization.Name)
    </div>

控制器像这样处理帖子:

[HttpPost]
    public ActionResult Create(Project project)
    {
        if (ModelState.IsValid)
        {
            db.Projects.AddObject(project);

            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(project);
    }

如何检查新的project.Organization.Name 是否已在数据库中?如果是,我希望新的 project 在数据库中引用该元组,而不是尝试再次添加它。

【问题讨论】:

    标签: c# asp.net entity-framework asp.net-mvc-3


    【解决方案1】:
    1. 向表中添加UNIQUE 约束。在多用户环境中,这是唯一确定的方法。
    2. 如果您必须在客户端知道,请查询数据库。

    像这样:

    [HttpPost]
    public ActionResult Create(Project project)
    {
        if (ModelState.IsValid)
        {
            var org = db.Organizations.SingleOrDefault(o => o.Name.Equals(project.Organization.Name, StringComparison.CurrentCultureIgnoreCase));
            if (org != null)
            {
                project.Organization = org;
            }
            db.Projects.AddObject(project);
    
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    
        return View(project);
    }
    

    【讨论】:

    • 这很好用。我还有一个问题。如何从 ADO.Net 实体模型构建器中添加“唯一”约束?
    • 大多数情况下,您不会。您需要在数据库服务器上执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2015-05-30
    • 2012-02-13
    • 1970-01-01
    • 2010-09-29
    • 2017-04-19
    • 1970-01-01
    相关资源
    最近更新 更多