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