DBContext最简单的更新外键的方法

时间:2013-05-15 01:46:49

标签: entity-framework

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


        }

1 个答案:

答案 0 :(得分:0)

SetValues的工作方式是逐个属性比较,对于也在参数中的左手对象的每个属性,它具有匹配类型,它将更新左边带有参数值的-hand对象。

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

话虽这么说,orgAcc可能有一个Company属性和一个CompanyId属性,以支持EF关系,所以,如果你跟随account个对象相同的模式,即直接存储CompanyId字段,而不必在公司中导航,然后SetValues可以自动更新CompanyId字段,该字段应在保存更改时更新外键。这样,您还可以避免专门指定orgAcc.Company字段的步骤。