首页 / C# / c# – 在实体框架中更新实体的最佳方法
c# – 在实体框架中更新实体的最佳方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 在实体框架中更新实体的最佳方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1581字,纯文字阅读大概需要3分钟。
内容图文
参见英文答案 > Entity Framework 5 Updating a Record 7个
我是实体框架的新手,我正在使用Nhibernate.在Nhibernate更新对象时,传递id不是必需的,你只需传递实体,Nhibernate就自己匹配id并更新实体.在EF我正在使用这个aprouch:
protected virtual bool UpdateEntity(TEntity entity, int id)
{
using (var ctx = new GenericContext())
{
var list = ctx.Set<TEntity>().ToList();
ctx.Entry<TEntity>(ctx.Set<TEntity> ().Find(id)).CurrentValues.SetValues(entity);
return ctx.SaveChanges() > 0;
}
}
这需要id来更新实体.这是最好的aprouch吗?有一些方法来更新实体只是在没有找到它的情况下传递实体?
解决方法:
这取决于您是否启用了自动跟踪.默认情况下,这意味着您检索的任何实体都将存储在您用于检索它的DbContext中,以及其原始值的副本.
然后,如果您编辑此实体,当您调用DbContext.SaveChanges()时,EF将遍历您的所有实体,并将它们与原始值进行比较,如果有任何更改,它将执行更新语句.
因此,如果您同时检索实体,编辑它,并希望保存它,则所有这些都在同一上下文的范围内.您所要做的就是调用contxt.SaveChanged(),EF将确定该实体已更新. (只要你没有禁用自动跟踪)
借用Eriks代码:
var ctx = new SchoolDBEntities()
var student = ctx.Students.Where(s => s.Name == "John Doe").First();
student.Name = "Erik Blessman";
ctx.SaveChanges(); // Will update the student
否则,如果此实体是手动创建的,并且不属于您需要的任何DbContexts
>将您的实体附加到新的(或您当前的)DbContext(如果您设置EntityState.Modified,这将自动为您完成)
>告诉DbContext这个实体已被修改过
> var entry = context.Entry(entity); //获取上下文中实体的条目
> entry.State = EntryState.Modified; //告诉EF这个实体已被修改
>(可选)告知EF您的实体上的哪些属性已被修改
>调用SaveChanges()
内容总结
以上是互联网集市为您收集整理的c# – 在实体框架中更新实体的最佳方法全部内容,希望文章能够帮你解决c# – 在实体框架中更新实体的最佳方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。