1
            var orgAcc = db_.Accounts.Find(account.Id);

            db_.Entry(orgAcc).CurrentValues.SetValues(account);

            orgAcc.Company = db_.Companys.Find(account.Company.Id);


            db_.SaveChanges();

这是更新实体关联的最简单方法吗?

        public class ChartofAccount: MasterData
        {
            [Key]
            public int Id { get; set; }

            [Required]
            [StringLength(6)]
            public string Code { get; set; }

            public virtual Company Company { get; set; }

            [Required]
            public string AccountName { get; set; }

            [Required]
            [StringLength(3)]
            public string AccountCurrency { get; set; }

            public virtual AccountCatagory Category1 { get; set; }

            public virtual AccountCatagory Category2 { get; set; }

            public string Reference { get; set; }

            public bool HasTransaction { get; set; }


        }
4

1 回答 1

0

有效的方法SetValues是逐个属性进行比较,并且对于同样在参数中的左侧对象中的每个属性,并且具有匹配类型,它将使用左侧对象中的值更新左侧对象争论。

我认为account.Company是与 不同类型的对象orgAcc.Company,例如来自 MVC 控制器参数的对象(即帐户及其引用的对象不是 EF 实体)。在这种情况下,您的方法似乎是一种不错的方法。

话虽如此,为了支持 EF 关系,orgAcc可能有一个Company属性和一个属性,因此,如果您的对象遵循相同的模式,即直接存储一个字段,而不是必须通过公司导航,那么 SetValues 可以自动更新 CompanyId 字段,该字段应在您保存更改时更新外键。这样,您还可以避免专门分配字段的步骤。CompanyIdaccountCompanyIdorgAcc.Company

于 2013-05-15T02:13:36.987 回答