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

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. Set Matrix Zeroes leetcode java

    题目: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. cl ...

  2. 混合开发 Hybird Ionic Angular Cordova web 跨平台 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. 大数据开发实战:Hive优化实战2-大表join小表优化

    4.大表join小表优化 和join相关的优化主要分为mapjoin可以解决的优化(即大表join小表)和mapjoin无法解决的优化(即大表join大表),前者相对容易解决,后者较难,比较麻烦. 首 ...

  4. Centos curl ssl 替换 NSS 为 OpenSSL

    参考:https://www.latoooo.com/xia_zhe_teng/368.htm 我的系统版本是 Centos 7 64位.为了方便,先安装常用的开发环境. yum groupinsta ...

  5. Android -- onMeasure

    onMeasure调用次数 当Activity获取焦点的时候,它就需要绘制布局.Android框架会处理绘制过程,但这个Activity必须提供它布局树的根节点. 绘制过程是从布局的根节点开始的.这个 ...

  6. 基于Deep Learning的中文分词尝试

    http://h2ex.com/1282 现有分词介绍 自然语言处理(NLP,Natural Language Processing)是一个信息时代最重要的技术之一,简单来讲,就是让计算机能够理解人类 ...

  7. Python机器学习——线性模型

    http://www.dataguru.cn/portal.php?mod=view&aid=3514 摘要 : 最近断断续续地在接触一些python的东西.按照我的习惯,首先从应用层面搞起, ...

  8. [转]学习块格式化上下文(BlockFormattingContext)

    原文:https://www.cnblogs.com/elcarim5efil/p/4745796.html   格式化上下文 格式化上下文( formatting contexts )├── 块级格 ...

  9. Java-JUC(十):线程按序交替执行

    问题: 有a.b.c三个线程,使得它们按照abc依次执行10次. 实现: package com.dx.juc.test; import java.util.concurrent.locks.Cond ...

  10. IIS中的application总是报404错误

      在IIS的一个站点下面建立了一个application,访问其中页面的时候总是报404(找不到页面)的错误,哪怕是最简单只包含一个简单html页面的application也是如此,而其他同级的ap ...