我有3个表:公司、分包合同和CompanyToSubcontract
CompanyToSubcontract表是公司的guid和委外合同的guid。我有一个关于委外编辑和创建视图的MultiSelectList,用户可以在其中选择多个公司。我终于让它工作了,它显示了在Subcontract视图中选择的正确公司。我在保存数据方面没有问题。
在create视图中,分包合同在写入Sql数据库之前没有guid,那么如何获得guid保存到CompanyToSubcontract表中呢?
另外,在编辑视图中,我做了一些错误的事情。它不会save.the公司的选择。我还需要删除未选中的公司的记录。做这件事最好的方法是什么?
我按照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));
}
}
}发布于 2010-02-02 06:34:41
在selectedCompanies foreach循环中,更改:
cs.subcontract_id = subcontract.subcontract_id;至:
cs.subcontract = subcontract;在我对this问题的回答中,详细解释了这种方式的原因。此外,LINQ- to -SQL还自动管理主键的分配及其对外键的传播。当您调用db.SubmitChanges()时,它会识别出如果subcontract对象没有分配外键,它会将其视为插入更改。此外,由于subcontract对象与CompanyToSubcontract对象相关联,因此它知道使用刚刚分配给Subcontract实体的主键值来更新关联实体中的外键字段。
https://stackoverflow.com/questions/2178754
复制相似问题