我有3张表:公司,分包和公司Tosubcontract

CompanyTosubcontract表是分包合同的公司和指南的GUID。我在分包合同上有一个多电机列表,并创建用户可以选择多个公司的视图。我终于使它工作了,它可以在“分包”编辑视图中显示正确的公司。我没有保存数据的问题。

在创建视图中,分包合同直到将其写入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));
            }

        }
    }
有帮助吗?

解决方案

在选定的Companies中 foreach 循环,更改:

cs.subcontract_id = subcontract.subcontract_id;

至:

cs.subcontract = subcontract;

我的回应中详细解释了这项工作的原因 这个 问题。此外,LINQ到SQL还管理主键的分配及其对外键的传播。你打电话时 db.SubmitChanges(), ,它认识到,如果分包对象没有分配外键,则将其视为插入更改。另外,由于分包合同对象与CompanyTosubncontract对象关联,因此它知道将其刚分配给分包合同实体的主要密钥值更新关联实体中的外键字段。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top