如何添加具有引用已在数据库中创建的实体的属性的新实体?

时间:2011-06-10 16:58:08

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

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

ProjectOrganization有多对一的关系。

Project的标量属性OrganizationName引用了Name

中的主键Organization

我有一个创建视图,它是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在数据库中引用该元组,而不是尝试再次添加它。

1 个答案:

答案 0 :(得分:2)

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

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