EF的ObjectContext的增删改查
转:http://blog.csdn.net/mynewdays/article/details/7822412
1)在VS中新建项目(使用VS2010),项目名称为"MyEF。"控制台应用程序,Winform,以及Web程序都可以,这里使用Winform程序做Demo。在窗体上添加三个按钮,分别为“添加”,“修改”,“删除”
2)在项目“MyEF”单击鼠标右键,在弹出的菜单中选择“添加”-“新建项”,在弹出的窗口中,选择左边“数据”,然后在右边选择“ADO.NET实体数据模型”,如图2-1

3)单击“添加”按钮,弹出“实体数据模型向导”,选择“从数据库生成”,然后单击“下一步”,弹出建立数据库连接界面
4)单击“新建连接”按钮,在弹出的”连接属性“窗口中选择服务器,登录方式和数据库之后单击下一步,如图4-1

5)单击”确定“,回到”选择您的数据连接“窗口,选中”是,在连接字符串中包含敏感数据“,单击”下一步“,弹出”选择数据库对象“窗口
6)选择要操作的表,如图6-1,然后单击完成。需要注意的是,表中一定要有主键

7)在解决方案资源管理器中多了一个”Model1.edmx“,如图7-1

8)双击”Model1.Designer.cs“,打开代码窗口,展开”上下文“,如图8-1所示

9)类的名称为”HBSIEntities“,顾名思义,里面存放的是HBSI数据库中你选择的表的实体。当然很多方法是存储在父类ObjectContext中的。就用HBSIEntities类来完成增删改查的操作。
10)添加:在”添加“按钮的单击事件中编写如下代码,注释写得很清楚,就不多说了
- <span style="font-size:14px;"><span style="white-space:pre"> </span> HBSIEntities entity = new HBSIEntities();
- /*新建一个T_UserInfo表的实体,
- * 即一个新行,为新行中的每一个字段赋值,
- * 要明白,一个表可以看做一个实体,
- * 表中的一行也可以看做一个实体*/
- T_UserInfo userinforow = new T_UserInfo()
- {
- UserName = "bj",
- Pwd = "123456",
- NickName = "猪八戒",
- Address = "高老庄",
- Sfzh = "123452223333444423"
- };
- /*将新建的行实体添加到表实体中,
- 这个操作是在程序层面操作的,
- * 并不会影响到数据库层面*/
- entity.T_UserInfo.AddObject(userinforow);
- /*将程序层面的实体的改变更新到数据源中,
- 通过这行代码,就会向数据库中添加一条数据*/
- entity.SaveChanges();</span>
11)修改:见代码
- HBSIEntities entity = new HBSIEntities();
- /*更改表的实体,注意在最后加上了“Id=7”,
- 标识要更改实体表T_UserInfo中Id=7的行实体,
- 为字段重新赋值即可*/
- T_UserInfo userinforow = new T_UserInfo()
- {
- UserName = "zbj",
- Pwd = "234567",
- NickName = "二师兄",
- Address = "高老庄",
- Sfzh = "123452223333444423",
- Id=7
- };
- /*将改变的行实体附加到表实体中,
- 注意此时只是在程序层面对表实体进行更改*/
- entity.T_UserInfo.Attach(userinforow);
- /*使用对象状态管理器ObjectStateManager
- * 标识实体userinforow的状态为“更改”而不是“删除”,
- EntityState有很多枚举值,可以自己查看,一看即懂*/
- entity.ObjectStateManager.ChangeObjectState(userinforow,EntityState.Modified);
- /*将程序层面的实体的改变更新到数据源中,
- 通过这行代码,就会更改数据库中对应表中的数据*/
- entity.SaveChanges();
12)先说删除,和更改很想,只需要改2点。第一是在创建行实体的时候里面只需为Id属性赋值即可,因为我们都是根据主键来删除的,知道别的字段的值没意义;第二就是更改EnrityState的枚举值为Delete即可,见代码
- HBSIEntities entity = new HBSIEntities();
- T_UserInfo userinforow = new T_UserInfo()
- {
- <span style="color:#ff0000;">Id = 7</span>
- };
- entity.T_UserInfo.Attach(userinforow);
- entity.ObjectStateManager.ChangeObjectState(userinforow, <span style="color:#ff0000;">EntityState.Deleted</span>);
- entity.SaveChanges();
13)更改是需要着重强调一点,创建要更改的行实体时,所有字段都要赋值,如我们本来只想为NickName属性改变之为”二师兄“,其余字段的值并不像更改,但仍然需要为其余字段赋上原值,否则更新到数据库中后,字段的值会成为Null。
14)查询:这里只说简单查询,即便利输出所有数据,复杂查询留到下一篇再说,见代码
- HBSIEntities entity = new HBSIEntities();
- StringBuilder stb = new StringBuilder();
- /*循环中的item标识表中的行*/
- foreach (var item in entity.T_UserInfo)
- {
- stb.AppendFormat("编号为{0},用户名为{1},密码为{2},昵称为{3}",item.Id,item.UserName,item.Pwd,item.NickName+"\n");
- }
- MessageBox.Show(stb.ToString());
结果如14-1

浙公网安备 33010602011771号