1

我有 3 个表:Company、Subcontracts 和 CompanyToSubcontract

CompanyToSubcontract 表是 Company 的 guid 和 Subcontract 的 guid。我在 Subcontract Edit 和 Create 视图上有一个 MultiSelectList,用户可以在其中选择多个公司。我终于让它工作了,它显示了在 Subcontract Edit 视图中选择的正确公司。我没有保存数据的问题。

在创建视图中,分包在写入 Sql 数据库之前没有 guid,那么如何获取 guid 以保存到 CompanyToSubcontract 表中?

另外,在编辑视图中,我做错了什么。它不保存。公司选择。我还需要删除未选中公司的记录。这样做的最佳方法是什么?

我按照 NerdDinner 教程获得了我的基本结构,现在我正在尝试更新以满足我的需求。

谁能指出我正确的方向?

在 SubcontractRepository 中:

public void Save()
    {
        db.SubmitChanges();
    }

在控制器中:

 [AcceptVerbs(HttpVerbs.Post), Authorize]
    public ActionResult Edit(string id, FormCollection formValues)
    {
        // Retrieve existing subcontract
        subcontract subcontract = subcontractRepository.GetSubcontract(id);

        if (subcontract == null)
            return View("NotFound");
        else
        {
            try
            {
                UpdateModel(subcontract);

                IEnumerable<Guid> selectedCompanies = Request.Form["Companies"].Split(new Char[] { ',' }).Select(idStr => new Guid(idStr));

                foreach (var item in selectedCompanies)
                {
                    CompanyToSubcontract cs = new CompanyToSubcontract();
                    cs.subcontract_id = subcontract.subcontract_id;
                    cs.company_id = item;
                    subcontractRepository.Save();
                }


                subcontract.lastupdate_date = DateTime.Now;
                subcontract.lastupdatedby_user = User.Identity.Name;

                //Persist changes back to database
                subcontractRepository.Save();

                //Perform HTTP redirect to details page for the saved subcontract
                return RedirectToAction("Details", new { id = subcontract.subcontract_no });
            }
            catch
            {
                ModelState.AddRuleViolations(subcontract.GetRuleViolations());

                return View(new SubcontractFormViewModel(subcontract));
            }

        }
    }
4

1 回答 1

1

在 selectedCompaniesforeach循环中,更改:

cs.subcontract_id = subcontract.subcontract_id;

至:

cs.subcontract = subcontract;

我对这个问题的回答中详细解释了这个工作的原因。此外,LINQ-to-SQL 还自动管理主键的分配及其对外键的传播。当您调用 时db.SubmitChanges(),它会识别出如果分包对象没有分配外键,则会将其视为 INSERT 更改。此外,由于 subcontract 对象与 CompanyToSubcontract 对象相关联,它知道将关联实体中的外键字段更新为它刚刚分配给 Subcontract 实体的主键值。

于 2010-02-01T22:34:40.877 回答