私は自分の会社エンティティにこれらのクラスを持っています
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; }
}
Edit メソッドは次のようになります。
[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 呼び出しが失敗するだけで、すべてが期待どおりに機能します。フィールドCompanyGroupが必要であるため、例外を掘り下げて、会社が無効であると彼が考えていることがわかりましたが、InjectFrom呼び出しの後でも会社変数をデバッガーで見ると、すべて問題ないようです。対応する企業グループがあります。