使用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 }