• 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资料,可以登录本人的主页。。。
    感谢大家的阅读....
     
  • 相关阅读:
    KMP算法
    IEEE754 32位浮点数表示范围
    银行家算法
    字符串类
    栈类
    稀疏数组类
    队列类
    多维数组类
    单向链表类
    哈希表类
  • 原文地址:https://www.cnblogs.com/maijin/p/4646119.html
Copyright © 2020-2023  润新知