-----------------------------------------------------目录-----------------------------------------------------

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 = ;
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 = ;
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资料,可以登录本人的主页。。。
感谢大家的阅读....
 

EntityFramework 5.0 CodeFirst 教程02-删除和修改/架构改变异常的处理的更多相关文章

  1. EntityFramework 5.0 CodeFirst 教程04-查询,插入,更新,和删除数据

    ---------------------目录-------------------------- EntityFramework 5.0 CodeFirst 教程04-查询,插入,更新,和删除数据  ...

  2. EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性

    ---------------------目录-------------------------- EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性 (2 ...

  3. EntityFramework 5.0 CodeFirst 教程01-搭建环境和快速上手

    ----------------------------目录------------------------------ EntityFramework 5.0 CodeFirst 教程03-数据结构 ...

  4. Swift3.0语言教程删除字符与处理字符编码

    Swift3.0语言教程删除字符与处理字符编码 Swift3.0语言教程删除字符 Swift3.0语言教程删除字符与处理字符编码,在字符串中,如果开发者有不需要使用的字符,就可以将这些字符删除.在NS ...

  5. CRL快速开发框架系列教程四(删除数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. (转) TexturePacker 3.0 使用教程

    著名的TexturePacker 已经升级到3.0了,下载地址: http://www.codeandweb.com/texturepacker 免费 license 申请地址: http://www ...

  7. Swift3.0语言教程使用路径字符串

    Swift3.0语言教程使用路径字符串 Swift3.0语言教程使用路径字符串,路径其实是字符串的一种,我们称为路径字符串.本小节将讲解如何使用路径字符串. 1.组合路径 开发者可以将数组快速的组合成 ...

  8. Swift3.0语言教程替换子字符串

    Swift3.0语言教程替换子字符串 Swift3.0语言教程替换子字符串,替换子字符串其实就是将字符串中的子字符串删除,然后再进行添加.为了让这一繁琐的过程变的简单,NSString提供了替换子字符 ...

  9. PAT 字符串-02 删除字符串中的子串

    /* 2 *PAT 字符串-02 删除字符串中的子串 3 *2015-08-09 4 作者:flx413 5 */ #include<stdio.h> #include<string ...

随机推荐

  1. 基于JT/T808协议的车辆监控平台架构方案

    技术支持QQ:78772895 1.接入网关应用采用mina/netty+spring架构,独立于其他应用,主要负责维护接入终端的tcp链接.上行以及下行消息的解码.编码.流量控制,黑白名单等安全控制 ...

  2. Angular2 -- 生命周期钩子

    组件生命周期钩子 指令和组件的实例有一个生命周期:新建.更新和销毁. 每个接口都有唯一的一个钩子方法,它们的名字是由接口名加上 ng前缀构成的.比如,OnInit接口的钩子方法叫做ngOnInit. ...

  3. Flask刷新问题

    修改页面中内容,特别是图片后,总是刷新不了.调试时,我常常通过修改端口来解决,从80-99不断改. 服务器部署,也遇到同样问题,重启web服务器,重启计算机都不行,网页已经改过来了,但是图片还是老图片 ...

  4. docker swarm join如何获取token

    在运行docker swarm join的时候需要一个token参数,如何知道这个参数那? [答案] Join as a worker node To retrieve the join comman ...

  5. IDEA 禁止自动导入引用包 取消import包

    http://www.oschina.net/question/2010061_226765 我想拷贝一小段代码,或者我就是不想引入拷贝来的包,我该怎么取消掉idea的自动导入import包呢? 找到 ...

  6. [Spring Boot] Complex Scope Scenarios of a Spring Bean - Mix Prototype and Singleton, ScopeProxy

    We have the following example: @SpringBootApplication public class In28minutesScopeApplication { pri ...

  7. Linux网络编程:基于TCP的程序开发回顾篇《转》

    面向连接的TCP程序设计 基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程: 其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有.可随着时间的推移,你 ...

  8. ZH奶酪:PHP抓取网页方法总结

    From:http://www.jb51.net/article/24343.htm 在做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过ht ...

  9. JavaScript 之 最佳位置选择

    Javascript 文件(下面简称脚本文件)需要被HTML文件引用才能在浏览器中运行.在HTML文件中可以通过不同的方式来引用脚本文件,我们需要关注的是,这些方式的具体实现和这些方式可能会带来的性能 ...

  10. Jenkins知识地图

    转自:http://blog.csdn.net/feiniao1221/article/details/10259449 这篇文章大概写于三个月前,当时写了个大纲列表,但是在CSDN上传资源实在不方便 ...