首页 > C# > ASP.NET MVC5环境中编辑/更新实体框架3中的记录的不同方法

ASP.NET MVC5环境中编辑/更新实体框架3中的记录的不同方法

上一篇 下一篇

我一直在探索在 ASP.NET MVC5环境中编辑/更新实体框架3中的记录的不同方法,但到目前为止,它们都没有满足我需要的所有框。我会解释为什么。

我找到了三种方法,我将提到它们的优缺点:

方法 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 – 附加更新的记录并将状态设置为实体状态。

db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();

优点

  • 1 x 对要更新的数据库的查询

缺点

  • 无法指定哪些属性更改
  • 视图必须包含每个属性

问题

我问你们的问题;有没有一种干净的方法可以实现这组目标?

  • 可以指定哪些属性更改
  • 视图不需要包含每个属性(例如密码!
  • 1 x 对要更新的数据库的查询

我知道这是一件很小的事情,但我可能错过了一个简单的解决方案。如果不是方法,则以方法为准 😉

分割线

网友回答:

我真的很喜欢被接受的答案。我相信还有另一种方法可以解决这个问题。假设您有一个非常短的属性列表,您不希望将其包含在视图中,因此在更新实体时,将省略这些属性。假设这两个字段是密码和SSN。

db.Users.Attach(updatedUser);

var entry = db.Entry(updatedUser);
entry.State = EntityState.Modified;

entry.Property(e => e.Password).IsModified = false;
entry.Property(e => e.SSN).IsModified = false;   

db.SaveChanges();   

此示例允许您在向 Users 表和视图添加新字段后基本上不考虑业务逻辑。

分割线

网友回答:

您正在寻找:

db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();

分割线

网友回答:

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();

模板简介:该模板名称为【ASP.NET MVC5环境中编辑/更新实体框架3中的记录的不同方法】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 171次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-06
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信文章 html5 微信图片 微信模板 自适应 微信素材 响应式 微信公众平台 单页式简历模板 企业网站
您可能会喜欢的其他模板