新问题新方法:在Entity Framework中实现指定字段更新【转再】
2011-09-16 10:47
501 查看
新问题新方法:在Entity
Framework中实现指定字段更新
又来一篇,大家也许都嫌烦了。但是写博客既能提高自己,又能帮助别人,而且每次写的过程中和发布出来之后都有收获,真是太赚了!麻烦大家忍一忍吧。言归正题,在之前的一篇随笔“准备用Entity
Framework实现数据的按需更新”中,我们实现了按需更新,但和这里的指定字段更新的应用场景不一样。
之前的按需更新的应用场景是:把需要更新与不需要更新的数据都给Entity Framework,由EF自己判断实际需要更新哪些。
现在的应用场景是:我明确知道要更新哪个字段,让EF做的只是更新这个操作,其他不用操心。
下面我们通过一个比喻来比较一下两者的区别。
比如我有一辆车想在汽车修理店更换一些部件。我把车停在车库里,来到修理间。这时,我就不能再直接接触这部车,必须通过修理间的工作人员。工作人员给我一个汽车模型,我有任何更换部件的想法,只能通过这个模型告诉他。
对应于第一种按需更新的场景,我不知道汽车需要实际更换哪些部件,我只知道更换后应该是什么样的。
流程是:
1. 告诉工作人员车牌号码,让他按照我放在车库中的汽车,制作一个一模一样的模型。
2. 工作人员把制作好的模型交给我。
3. 我在这个汽车模型的基础上修改成我想要的样子(但我不知道哪些部件要换,哪些部件不要换)。
4. 把修改好的汽车模型交给工作人员,让他去修理就行了。
5. 我悠然自得地去逛街,不用操心任何事。
对应于第二种根据指定字段更新的场景,我要更换前车灯,汽车修理店你不用管前车灯有没有坏,我就是要换,就是想让你们挣钱。
流程是:
1. 我随手从旁边拿了一个空汽车模型,修改为我想要的前车灯。
2. 把这个汽车模型交给工作人员,让他去修理就行了。
3. 我悠然自得地去逛街,不用操心任何事。
对于第二种场景,如果我们采用第一种场景的操作流程,工作人员累,效率低,费用自然也高。用第二个流程是必然的选择。
今天,我们终于找到了针对第二个流程的解决方法。
比如,我们要更新某个Blog的上次更新时间,我们只需要:
1. 新建一个Blog实体对象,告诉他要更新的Blog的ID以及“上次更新时间”。
2. 把这个实体对象交给Entity Framework,让他完成更新。
代码如下:
public void UpdateBlogCoinfigLastUpdatedTest()
{
using (BlogDbContext context = new BlogDbContext())
{
var blog = new Blog() { BlogID = 0, LastModified = DateTime.Now };
context.BlogConfigs.Attach(blog);
var stateEntry = ((IObjectContextAdapter)context).ObjectContext.
ObjectStateManager.GetObjectStateEntry(blog);
stateEntry.SetModifiedProperty("LastUpdated");
context.SaveChanges();
}
}
EF生成的SQL语句如下:
exec sp_executesql N'update [dbo].[blog_Config]
set [LastUpdated] = @0
where ([BlogID] = @1)
',N'@0 datetime2(7),@1 int',@0='2011-04-06 14:12:28.2129938',@1=0
秘密就藏在ObjectContext中,通过正常的方式不能得到context的ObjectContext属性。
幸运的是,园子里的大侠已经将一本秘籍流传于江湖,借助这本秘籍,我们才为这个新问题找到了新方法。在这里感谢LingzhiSun大侠
相关文章推荐
- 新问题新方法:在Entity Framework中实现指定字段更新
- 新问题新方法:在Entity Framework中实现指定字段更新
- Hibernate update方法,只更新指定字段,已解决
- 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新
- adaboost 算法在实现中的一些问题以及解决方法(持续更新)
- 待更新·优化问题求解算法实现方法·Java版
- 更新数据库所有表的某一个指定字段 ,附加对‘将 varchar 值转换为数据类型为 int 的列时发生语法错误’处理方法
- 在Entity Framework中实现指定字段更新
- 用CHARINDEX方法实现对字段按指定顺序排序
- Yii使用find findAll查找出指定字段的实现方法
- android中实现view的更新UI有两组方法的问题
- Yii使用find findAll查找出指定字段的实现方法
- Hibernate update方法,只更新指定字段,已解决
- 更新操作如何防止带外键的字段出现重复,代码实现方法
- Bmob实现登陆注册,解决官方signUp与Success方法更新后出错问题
- Yii使用find findAll查找出指定字段的实现方法
- Android自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题
- Entity Framework中实现指定字段更新
- ThinkPHP 关于用create方法实现数据更新的问题
- Hibernate update方法,只更新指定字段