EntityFramework 5.0 CodeFirst 教程02-删除和修改/架构改变异常的处理
-----------------------------------------------------目录-----------------------------------------------------
EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性 (2015-07-22 17:30)
EntityFramework 5.0 CodeFirst 教程02-删除和修改/架构改变异常的处理 (2015-07-14 17:50)
EntityFramework 5.0 CodeFirst 教程01-搭建环境和快速上手 (2015-07-13 10:48)
-----------------------------------------------------目录-----------------------------------------------------
上节,我们搭建了一个简单的环境,并且通过代码First的方式,生成数据库,创建数据表,同时往数据表中添加记录,查找数据表中的数据,这集我们先来学习获取其中的一条记录,对该记录进行修改,然后删除某一条记录。
首先是获取一条记录,比如获取第一条记录
//获取一条数据 using (var context = new Context()) { var savedPeople = context.People; if (savedPeople.Any())//如果源序列包含任何元素,则为 true;否则为 false 也就是如果表中有一条记录 { var person = savedPeople.First();//取得第一条 string name = person.FirstName;//取得数据 } }
如果要获取某一条
var personId = 1; var p2 = context.People.Find(personId);//获取要删除的记录 通过主键ID
上面我们既然可以拿到一条数据,那么下面我们就可以修改这条数据了,比如我们要将firstName修改
//修改一条记录 using (var context = new Context()) { var savedPeople = context.People; if (savedPeople.Any())//如果源序列包含任何元素,则为 true;否则为 false 也就是如果表中有一条记录 { var person = savedPeople.First();//取得第一条 person.FirstName = "www.bamn.cn";//修改名字 person.LastName = "Benson"; context.SaveChanges(); } }
然后就是删除一条记录了
删除一条记录,其实非常简单的,上面我们已经可以根据ID获取一条记录了,那么要删除这条记录,只需要获取这条交流 然后调用上下文context中的Remove方法就可以删除这条记录了,但是有一条要注意,就是删除了要记得SaveChanges喔。。
//删除一条记录 using (var context = new Context()) { var personId = 2; var person = context.People.Find(personId);//获取要删除的记录 通过主键ID if (person != null) { context.People.Remove(person); context.SaveChanges(); } }
------------------------------------------------------------------------------
好了,上一拍里面我们基本实现了对数据库的创建 新增 查询 修改 删除,但是我们一直都是只对一张表进行操作,那就是person表,我们的数据结构一直都没有变化,但是这个肯定是不合逻辑的,我们肯定需要其他的表,或者要修改已经有的表,这个时候我们操作发现会报错,首先我们添加一个公司的类
public class Company { public int CompanyId { get; set; } public string Name { get; set; } }
很简单,只有一个主键 和一个名称
然后在上下文context里面添加一个dataset
public DbSet<Company> Companies { get; set; }
这样修改后,当我们运行我们的程序的时候,会报下面的错误
“System.InvalidOperationException”类型的未经处理的异常在 EntityFramework.dll 中发生
其他信息: The model backing the 'Context' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
这个时候,我们需要使用另外的一种方法来重新构建我们的数据结构
定义一个Initializer类DropCreateDatabaseIfModelChanges<Context>这是一个泛型类
然后重写seed因子方法
protected override void Seed(Context context) { context.Companies.Add(new Company { Name = "My company" }); }
在这个方法里面,我们添加一条记录到表了,
这个seed方发挥在执行完本来的操作后才会触发的
当然我们会有更好的方法来处理这个结构改变的问题,我们以后的课程会学习这个问题的...
执行完后,代码不会报异常了,而且也添加了一个新表companies
本集全部代码
#region 第二节课
//获取一条数据 //using (var context = new Context()) //{ // var savedPeople = context.People; // if (savedPeople.Any())//如果源序列包含任何元素,则为 true;否则为 false 也就是如果表中有一条记录 // { // var person = savedPeople.First();//取得第一条 // string name = person.FirstName;//取得数据 // var personId = 1; // var p2 = context.People.Find(personId);//获取要删除的记录 通过主键ID // } //} //修改一条记录 //using (var context = new Context()) //{ // var savedPeople = context.People; // if (savedPeople.Any())//如果源序列包含任何元素,则为 true;否则为 false 也就是如果表中有一条记录 // { // var person = savedPeople.First();//取得第一条 // person.FirstName = "www.bamn.cn";//修改名字 // person.LastName = "Benson"; // context.SaveChanges(); // } //} //删除一条记录 //using (var context = new Context()) //{ // var personId = 2; // var person = context.People.Find(personId);//获取要删除的记录 通过主键ID // if (person != null) // { // context.People.Remove(person); // context.SaveChanges(); // } //} #endregion Database.SetInitializer(new Initializer());//取消数据库架构修改后 using (var context = new Context()) { bool res = context.Database.CreateIfNotExists(); //往数据库中添加数据 var person = new Person { FirstName = "John", LastName = "Doe" }; context.People.Add(person); context.SaveChanges(); //获取数据 var savedPeople = context.People; foreach (var p in savedPeople) { Console.WriteLine("Last name:{0},first name:{1},id {2}", p.LastName, p.FirstName, p.PersonId); } } Console.ReadKey();
-------------------------------------------------
好了这集就先说的这里,我们下一集来学习复杂一点的数据结构....
更多EF资料,可以登录本人的主页。。。
感谢大家的阅读....