_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方法。
Attach的目的是把那些游离的实体附加到DbContext,游离的可以是你自己手工构建的,也可以是通过Dettach排除的。
假如你的entity本身是来自EF的查询,或使用了ADD命令添加到集合之类的,自然不需要使用Attach。
当使用Entry<T>(entity)进行操作的时候,EF会自动把entity附加进来。
如果是游离的entity,我要更新的话是需要Attach的,如果不是游离的Attach可用可不用是吧,Attach来自DbContext的entity并不会从夫添加,是吧
@北在北方: 对。
@519740105: 那如果新建的类,这个类的属性值与DbContext中的一个相同,即从人的逻辑上来说相同的实体,那Attach的时候DbContext是不是根据Key来判断需不需要添加来避免重复?
@北在北方: 这个没有做过实验,但应该是这样的。如果id为0则执行添加操作。