为了账号安全,请及时绑定邮箱和手机立即绑定

实体框架5更新记录

实体框架5更新记录

C#
慕的地8271018 2019-07-01 10:54:55
实体框架5更新记录在ASP.NETMVC 3环境中,我一直在探索在实体框架5中编辑/更新记录的不同方法,但到目前为止,它们都没有勾选我需要的所有框。我会解释原因的。我发现了三种方法,我将提到它们的优缺点:方法1-加载原始记录,更新每个属性var original = db.Users.Find(updatedUser.UserId);if (original != null){     original.BusinessEntityId = updatedUser.BusinessEntityId;     original.Email = updatedUser.Email;     original.EmployeeId = updatedUser.EmployeeId;     original.Forename = updatedUser.Forename;     original.Surname = updatedUser.Surname;     original.Telephone = updatedUser.Telephone;     original.Title = updatedUser.Title;     original.Fax = updatedUser.Fax;     original.ASPNetUserId = updatedUser.ASPNetUserId;     db.SaveChanges();}行家可以指定哪些属性更改。视图不需要包含所有属性反方2 x数据库查询,加载原始数据,然后更新方法2-加载原始记录,设置更改的值var original = db.Users.Find(updatedUser.UserId);if (original != null){     db.Entry(original).CurrentValues.SetValues(updatedUser);     db.SaveChanges();}行家只将修改过的属性发送到数据库。反方视图需要包含每个属性。2 x数据库查询,加载原始数据,然后更新方法3-将更新的记录和设置状态附加到EntityState.Modifieddb.Users.Attach(updatedUser);db.Entry(updatedUser).State = EntityState.Modified;db.SaveChanges();行家对数据库进行1x查询以更新反方无法指定哪些属性更改视图必须包含每个属性。问题我的问题是,我有一个干净的方法可以实现这套目标吗?可以指定哪些属性更改。视图不需要包含所有属性(例如密码!)对数据库进行1x查询以更新我知道这是一个很小的事情要指出,但我可能错过了一个简单的解决办法。(如不采用方法,则以方法为准;)
查看完整描述

3 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

foreach(PropertyInfo propertyInfo in original.GetType().GetProperties()) {
    if (propertyInfo.GetValue(updatedUser, null) == null)
        propertyInfo.SetValue(updatedUser, propertyInfo.GetValue(original, null), null);}db.Entry(original).CurrentValues.SetValues(updatedUser);db.SaveChanges();


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 384 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信