这几天一直在看MVC 开发模式,其中借助EF框架对数据库进行 增删改查操作 现在就小小的总结一下吧
在使用EF操作数据库时,会首先添加 ADO.NET数据模型,这时,会为我们添加一个数据上下文类,使用这个类的对象可以对数据库做任何操作。所以在使用EF操作数据库之前 需要创建数据上下文对象。
MyDatabaseEntities mde = new MyDatabaseEntities();
1.使用EF 对数据库 做增加操作
1.1 创建一个需要被操作数据表的对象(一般来说 ,一张表就是一个实体,也就是一个类),以tblPerson 表为例(int id,string name ,string sex,Nullable<int> age)其中age 不能为空 id 为主键,自动增长类型:
tblPerson personAdd=new tblPerson ();
personAdd.name ="lss";
personAdd.sex="男";
personAdd.age=23;(补充说明:由于tblPerson 表中规定了 age 不能为空,所以必须给它赋值,这个在之后的修改 删除操作中会体现)
//在这里 注明一下 ,由于ID是自动增长型,所以添加的时候不需要给id赋值。
1.2 告诉EF上下文 要 对 数据库 进行 增加操作
mde.tblPerson .Add(personAdd);
1.3 将实体的变化保存到数据库
mde.SaveChanges()
2. 使用EF 对数据库 做删除操作
2.1 同理 创建一个 tblPerson 对象
tblPerson personDelete =new tblPerson ();
// 在进行删除和修改操作时,一定要指明主键ID(在这里是ID,就是一个表的主键,在使用EF对表进行操作时,这个表一定需要指定主键)
// 假如我们使用 EF删除 id为2 的那条记录
personDelete.id=2;
// 由于age 是非空的 ,所以需要 给 age 赋值 随便就可以
personDelete.age=23;
2.2.1 Method1 将 personDelete 对象加载到EF 实体容器中
mde.tblPerson.Attach(tblPersonDelete);
2.2.2 告诉上下文将要 进行 删除 操作
mde.tblPerson.Remove(tblPersonDelete);
2.2.3 将所做的删除操作保存到数据库
mde.SaveChanges();
//到这里 删除操作 做完了,下面介绍第二种方法
2.2.1 Method2 将personDelete 对象加载到EF 实体容器中 并且 获取 返回 的 实体对象
DbEntityEntry<tblPerson> entryDelete = mde.Entry<tblPerson>(tblPersonDelete);
2.2.2 将实体对象 在EF 容器中的 状态修改为 delete
entryDelete.State=System.Data.EntityState.Deleted
2.2.3 将删除后的 实体 对象保存
mde.SaveChanges();
3. 使用EF 对数据库 做 修改操作
3.1 创建 tblPerson 对象
tblPerson tblPersonModify=new tblPerson ();
// 在进行 修改操作时 需要指定id 假设我们修改 id为3 的那一条数据
tblPersonModify.id=3;
//指明要修改的 那一列 假如 将 id 为 3 的数据的 name改为 yzk
tblPersonModify.name="yzk";
//在这里 同时需要 给 age 赋值
tblPersonModify.age=34;
3.2 将tblPersonModify 对象加载到EF 框架 ,并且 获取 返回的 实体对象
DnEntityEntry<tblPerson> entryModify=mde.Entry<tblPerson>(tblPersonModify);
3.3 将tblPersonModify 实体 对象 在EF框架中的存储状态 修改为 未修改
entryModify.State=System.Data.EntityState.UnChanged;
3.4 将tblPersonModify 对象中 需要 修改的 属性 在EF中框架 的实体状态 IsModified 修改为true ,表示 这个 属性需要 EF 来修改
entryModify.Property(d=>d.name).IsModified=true;
3.5 告诉上下文 将修改的 实体 对象 保存到 数据库
mde.SaveChanges();
4. 使用EF 对数据库 进行 查询操作 (SQO 和 linq)
4.1 使用SQO 对数据库 进行查询
4.1.1 在这里 产生 了 延迟加载 ,通过数据库 里面的 工具可以知道 这一步并没有 去数据库 查询 , 只是将sql查询 语言 保存了
DbQuery<tblPerson> dbQuery= mde.tblPerson.Where(d=>d.name like "%l%")as DbQuery<tblPerson>;
4.1.2 当我们使用 ToList() 方法时,这样 才从 数据库 查询除了 数据
List<tblPerson> list=dbQuery.ToList();
4.2 使用LINQ语句 对数据库 进行 查询
(from d in mde.tblPerson where d.name like "%l%" select d)
上面一段代码 返回类型 是IQueryable<tblPerson> 泛型集合
和上面的一样 ,使用的 时候 需要调用ToList()方法 将他转化成 list集合
到这里 ,使用EF 对数据库 进行 查询,修改,添加,删除 操作已经 写完了 ,希望各位 多多指教 一起进步 !!!~~~~