zoukankan      html  css  js  c++  java
  • EntityFramework 5.0 CodeFirst 教程04-查询,插入,更新,和删除数据

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

    EntityFramework 5.0 CodeFirst 教程04-查询,插入,更新,和删除数据 (2015-07-22 17:30)

    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)

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

    这一章,我们学习如何使用EF和LINQ来对数据进行查询等操作,我们将会详细了解查询的生命周期,明白如何使用eager和延迟加载。

    1 如何使用linq的方法和查询语法
    2 如何在查询语句中过滤和分类数据
    3 学习高级一些的技术延迟加载
     
    linq to sql基础
     
    Entity Framework 提供给SQL Server使用者去实现IQueryable 接口
    //linq查询
    var query = personContext.People;
    var persons = query.ToList();
     
    foreach (var p in persons)
    {
    Console.WriteLine("Last name:{0},first name:{1},id {2},mid={3}",p.LastName, p.FirstName, p.PersonId,p.MiddleName);
    }
     
    linq提供两种查询的语法
    1 使用内置方法(method syntax)
    2 使用查询语法(query syntax)
     
    其中查询语法看起来很像sql语句的
    在查询语句中过滤数据
    //query语法
    var query = from people in personContext.People
    where people.PersonId >= 0
    select people;
     
    foreach (var p in query.ToList())
    {
    Console.WriteLine("Last name:{0},first name:{1},id {2},mid={3}",
    p.LastName, p.FirstName, p.PersonId, p.MiddleName);
    }
     
    //方法语法
    var methodQuery = personContext.People.Where(p => p.PersonId >= 0);
     
    foreach (var p in methodQuery.ToList())
    {
    Console.WriteLine("Last name:{0},first name:{1},id {2},mid={3}",
    p.LastName, p.FirstName, p.PersonId, p.MiddleName);
    }
    多个条件过滤
     
    设置主键自增长
     
    数据排序
     
    注意一个EF的验证错误提示:
    “System.Data.Entity.Validation.DbEntityValidationException”类型的未经处理的异常在 EntityFramework.dll 中发生
     
    其他信息: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
     
    以上这个异常提示很不友好,只是告诉你有错误,但是没出现具体哪个字段错误了,
    我封装了一个方法来获取具体的错误提示,
    protected string GetValidationError(DbEntityValidationException dbex)
    {
    StringBuilder sb = new StringBuilder();
    IEnumerable<DbEntityValidationResult> validResult = ((System.Data.Entity.Validation.DbEntityValidationException)dbex).EntityValidationErrors;
    foreach (var item in validResult)
    {
    foreach (var error in item.ValidationErrors)
    {
    sb.AppendLine(error.ErrorMessage);
    }
    }
    return sb.ToString();
    }
     
    然后我们在异常出现的地方 去catch DbEntityValidationException  这个异常
     
     
    这样 我们就很快找出是哪里错误了。。
     
    关于数据库的初始化,我们可以在程序开始执行的地方,进行操作
     
     
    这样就会根据context这个上下文里面的实体进行初始化生产数据库的。
     
    很明显 我们这里只有一个表person表 数据库连接字符串是dblink
     
    我们在打开person类
    发现我们使用数据标注的方式 添加了两个标注,所以数据库生成的时候是char类型 并且长度只有一,所以我们在上面插入数据的时候,赋值给middlename这个字段 太长了,所以出错了....
    所以,我们注释了上面的两个注释......
  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/maijin/p/5337516.html
Copyright © 2011-2022 走看看