首页新闻找找看学习计划

求一下EF代码解释

0
悬赏园豆:5 [已解决问题] 解决于 2014-08-25 10:35

_dbcontext.Set<T>().Attach(entity);//001
_dbcontext.Entry<T>(entity).State = System.Data.Entity.EntityState.Modified;//002
_dbcontext.SaveChanges();

//===

_dbcontext是DbContext的子类;这段代码用于实现对实体Entity的更新功能;

我发现001行代码注释掉也能实现更新功能;

而且仅仅利用002行代码只要把EntityState改为Added就能实现增加功能;

求解释Entry和Attach方法。

北在北方的主页 北在北方 | 菜鸟二级 | 园豆:206
提问于:2014-08-25 09:10
< >
分享
最佳答案
0

Attach的目的是把那些游离的实体附加到DbContext,游离的可以是你自己手工构建的,也可以是通过Dettach排除的。

假如你的entity本身是来自EF的查询,或使用了ADD命令添加到集合之类的,自然不需要使用Attach。

当使用Entry<T>(entity)进行操作的时候,EF会自动把entity附加进来。

收获园豆:5
519740105 | 大侠五级 |园豆:5810 | 2014-08-25 09:15

如果是游离的entity,我要更新的话是需要Attach的,如果不是游离的Attach可用可不用是吧,Attach来自DbContext的entity并不会从夫添加,是吧

北在北方 | 园豆:206 (菜鸟二级) | 2014-08-25 09:26

@北在北方: 对。

519740105 | 园豆:5810 (大侠五级) | 2014-08-25 09:28

@519740105: 那如果新建的类,这个类的属性值与DbContext中的一个相同,即从人的逻辑上来说相同的实体,那Attach的时候DbContext是不是根据Key来判断需不需要添加来避免重复?

北在北方 | 园豆:206 (菜鸟二级) | 2014-08-25 09:41

@北在北方: 这个没有做过实验,但应该是这样的。如果id为0则执行添加操作。

519740105 | 园豆:5810 (大侠五级) | 2014-08-25 10:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册