我的公司实体有这些课程
public class Company
{
public Company()
{
this.Users = new HashSet<User>();
this.Tools = new HashSet<Tool>();
}
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public virtual ICollection<User> Users { get; set; }
public virtual ICollection<Tool> Tools { get; set; }
[Required]
public virtual CompanyGroup CompanyGroup { get; set; }
}
public class CompanyDto
{
public string Name { get; set; }
public string Address { get; set; }
}
在CompaniesController中我已经添加了一个带有Id参数的附加类,用于编辑/更新方法,如下所示
public class CompanyViewEditModel : CompanyDto {
public int Id { get; set; }
}
编辑方法如下所示:
[HttpPost]
public ActionResult Edit(CompanyViewEditModel companyViewModel)
{
if (ModelState.IsValid)
{
var company = db.Companies.Find(companyViewModel.Id);
company.InjectFrom(companyViewModel);
db.Entry(company).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(companyViewModel);
}
InjectFrom方法来自ValueInjecter。
由于验证异常,所有内容都按预期工作,只有db.SaveChanges调用失败。通过一些挖掘,我发现他认为公司是无效的,因为现场公司组是必需的,但如果我拿一个调试器看看公司变量,即使在InjectFrom调用之后,一切似乎也没问题。相应的公司集团就在那里。
答案 0 :(得分:4)
考虑更改模型,因为您不必根据需要标记导航属性。而是像这样添加一个FK。
public class Company
{
public Company()
{
this.Users = new HashSet<User>();
this.Tools = new HashSet<Tool>();
}
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public int CompanyGroupId { get; set; }
public virtual ICollection<User> Users { get; set; }
public virtual ICollection<Tool> Tools { get; set; }
public virtual CompanyGroup CompanyGroup { get; set; }
}