2

私は自分の会社エンティティにこれらのクラスを持っています

    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呼び出しの後でも会社変数をデバッガーで見ると、すべて問題ないようです。対応する企業グループがあります。

4

1 に答える 1

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; }
}
于 2012-10-25T11:12:54.447 に答える