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; }
    }

编辑方法如下所示:

        [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 回答