由于我是自学的,没有人教,在网上查资料也查不到个所以然、问大神们也是爱理不理的。
所以这篇随笔纯粹源自于我自己的认识。是否真正正确我也没有把握。
如果有什么错误,请大神们给予指正
===========================================
(一)、增加、删除、修改操作,都可以直接调用dbset<>集合的Add()、AddRange()、Remove()、AddOrUpdate() 几个方法、然后调用DbContext.SaveChange()实例对象方法,实现增删改。
数据上下文baglEntities 中有一个actionlist的dbset集合
public partial class baglEntities : DbContext { public baglEntities() : base("name=baglEntities") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); } public virtual DbSet<actionlist> actionlist { get; set; } }
public void test()
{
baglEntities bg=new baglEntities();
}
1、增加:bg.actionlist.Add(actionlist类型的对象); bg.SaveChange();
2、删除:bg.actionlist.Remove(从actionlist集合中查找到的对象); bg.SaveChange();
3、修改:bg.actionlist.AddOrUpdate(从actionlist集合中拿到的对象);bg.SaveChange();
=================================================================
教程上是这样说的,可是很多时候,我们找不到AddOrUpdate()方法?
(二)、利用状态跟踪实现增删改(EF中增删改的表层原理)
DbContext中有一个方法Entry(实体对象),这个方法要求传入一个实体对象,这个方法的返回值有一个state属性。bg.Entry(actionlist实体对象).state
这个state属性是一个EntityState枚举,该枚举包含5个值:Added、deleted、UNchanged、Modifield、Detached。 顾名思义,这个枚举用来标注实体对象的状态。
EntityState枚举这五个值的含义书面解释比较绕口,我用常用说法来解释下:
(1)Added:把指定对象的状态标注为增加。
(2)deleted:把指定对象的状态标注为删除。
(3)Modifield:把指定对象的状态标注为修改。
(4)UNchanged:把指定对象的状态标注为未改变(也就是这个实体对象从数据库中刚刚拿到,没有做任何改变)
(5)Detached:没有与dbset集合挂钩的对象的状态。
通过操作状态,给state属性赋状态,再调用SaveChange();方法,EF就能够自动的对对象进行增删改操作。
实际上,EF的ADD REMOVE 其实就是通过操作状态,之后根据实体对象的状态进行SQL的组装。假如给一个实体对象状态设置成Added。EF检测到这个对象状态为Added就会根据这个对象制作Insert 命令发往数据库。最终完成插入数据。
2017年2月22日-----------乱码新手自学.net 之Entity Framework 增删改
原文:http://www.cnblogs.com/bibibibi/p/6431403.html