[入门]EF实体框架的增删查改


使用EF(实体框架)可以及其方便地创建和修改SQL数据库,它封装了繁琐的SQL代码,通过数据库和对象之间的映射,让程序员可以完全按照面向对象的思路使用linq语句操纵数据库中的数据。


首先,在这个例子里,创建ModelStudent.edmx文件,用它建立Student表,里面有Id,Name,Age三项。去掉主键的自动增长标识,生成SQL语句,即可创建一个货真价实数据表!


在ModelStudent.Designer.cs当中有一个类叫ModelStudentContainer,这个类可以看做我们的数据库,Student类则是这张表对应的类,Student对象就是表中的一行。


接下来看如何进行增删改查操作,代码可以拷贝下来,分段试运行。



1
using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleApplication1 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 //创建数据库实体 13 ModelStudentContainer DemoDB = new ModelStudentContainer(); 14 15 #region 增加数据 16 17 ////创建具体实体(表中一行) 18 //Student stu1 = new Student() 19 //{ 20 // ID = 1, 21 // Name = "张飞", 22 // Age = 20 23 //}; 24 //Student stu2 = new Student() 25 //{ 26 // ID = 2, 27 // Name = "关羽", 28 // Age = 21 29 //}; 30 //Student stu3 = new Student() 31 //{ 32 // ID = 3, 33 // Name = "赵云", 34 // Age = 22 35 //}; 36 //Student stu4 = new Student() 37 //{ 38 // ID = 4, 39 // Name = "刘备", 40 // Age = 23 41 //}; 42 //Student stu5 = new Student() 43 //{ 44 // ID = 5, 45 // Name = "刘表", 46 // Age = 24 47 //}; 48 //Student stu6 = new Student() 49 //{ 50 // ID = 6, 51 // Name = "刘禅", 52 // Age = 25 53 //}; 54 55 ////将实体stu添加到数据库实体对象中 56 //DemoDB.Student.AddObject(stu1); 57 //DemoDB.Student.AddObject(stu2); 58 //DemoDB.Student.AddObject(stu3); 59 //DemoDB.Student.AddObject(stu4); 60 //DemoDB.Student.AddObject(stu5); 61 //DemoDB.Student.AddObject(stu6); 62 63 ////保存对数据库的修改 64 //DemoDB.SaveChanges(); 65 66 #endregion 67 68 #region 查询1:一般查询,查询所有数据 69 70 //var result = from u in DemoDB.Student 71 // select u; 72 73 //foreach (var item in result) 74 //{ 75 // Console.WriteLine("ID:{0},姓名:{1},年龄:{2}。", item.ID, item.Name, item.Age); 76 //} 77 78 #endregion 79 80 #region 查询2:使用ToList防止延迟加载,拆分子查询 81 82 ////这个查询结果可以保存到服务器内存中 83 //var result1 = (from u in DemoDB.Student 84 // where u.Age >= 22 85 // select u).ToList<Student>(); 86 87 //var result2 = from u in result1 88 // where u.Name != "赵云" 89 // select u; 90 91 //foreach (var item in result2) 92 //{ 93 // Console.WriteLine("ID:{0},姓名:{1},年龄:{2}。", item.ID, item.Name, item.Age); 94 //} 95 96 #endregion 97 98 #region 查询3:使用Where方法(lambda表达式) 99 100 ////使用了Where泛型方法,要传入一个lambda表达式 101 //var result = DemoDB.Student 102 // .Where<Student>(t => t.ID == 1); 103 104 //foreach (var item in result) 105 //{ 106 // Console.WriteLine("ID:{0},姓名:{1},年龄:{2}。", item.ID, item.Name, item.Age); 107 //} 108 109 #endregion 110 111 #region 查询4:Linq分页查询 112 113 ////要跳过多少页 114 //int skipPage; 115 ////每页两条数据 116 //int countPerPage=2; 117 118 ////从跳过0页到跳过2页(输出第1-3页) 119 //for (skipPage = 0; skipPage <= 2; skipPage++) 120 //{ 121 // var result = DemoDB.Student 122 ////分页必须排序 123 // .OrderBy(t => t.ID) 124 ////跳过指定页数 125 // .Skip<Student>(skipPage * countPerPage) 126 ////获取条数 127 // .Take<Student>(countPerPage); 128 129 // Console.WriteLine("第{0}页:", skipPage + 1); 130 ////输出查询结果(该页) 131 // foreach (var item in result) 132 // { 133 // Console.WriteLine("ID:{0},姓名:{1},年龄:{2}。", item.ID, item.Name, item.Age); 134 // } 135 136 // Console.WriteLine(); 137 //} 138 139 #endregion 140 141 #region 查询5:使用匿名类查询多个字段 142 143 //var result = from p in DemoDB.Student 144 // where p.ID < 4 145 ////定义一个包含了ID和Name信息的匿名类 146 // select new { p.ID, p.Name }; 147 148 //foreach (var item in result) 149 //{ 150 ////这里无法输出年龄 151 // Console.WriteLine("ID:{0},姓名:{1}。", item.ID, item.Name); 152 //} 153 154 #endregion 155 156 #region 修改1:修改1条记录 157 158 ////这里没有写where字句,会查询出4条记录 159 //var result = from u in DemoDB.Student 160 // select u; 161 162 ////但是这个方法一次只能取出一条记录 163 ////注:First方法如果返回空值则抛异常 164 //var target = result.FirstOrDefault<Student>(); 165 ////所以只修改了查询结果集中的第一条记录 166 //target.Name = "司马懿"; 167 168 //DemoDB.SaveChanges(); 169 170 #endregion 171 172 #region 修改2:修改多条记录 173 174 //var result = from u in DemoDB.Student 175 // select u; 176 177 ////使用循环方式,修改所有查询到的记录 178 //foreach (var item in result) 179 //{ 180 // item.Age = 10; 181 //} 182 183 //DemoDB.SaveChanges(); 184 185 #endregion 186 187 #region 删除 188 189 //var result = from u in DemoDB.Student 190 // where u.Name == "关羽" 191 // select u; 192 193 ////删除所有查询结果(这里只有一条结果) 194 //foreach (var item in result) 195 //{ 196 // DemoDB.Student.DeleteObject(item); 197 //} 198 199 //DemoDB.SaveChanges(); 200 201 #endregion 202 203 Console.WriteLine("执行完毕!"); 204 Console.ReadKey(); 205 } 206 } 207 }

 

posted @ 2013-04-03 13:22  derryliang  阅读(540)  评论(0)    收藏  举报