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这个字段 太长了,所以出错了....
    所以,我们注释了上面的两个注释......
  • 相关阅读:
    艾氏筛法资料
    CF Soldier and Cards (模拟)
    CF Soldier and Badges (贪心)
    POJ 1308 Is It A Tree? (并查集)
    HDU 1272 小希的迷宫 (并查集)
    HDU 1213 How Many Tables (并查集)
    POJ 1611 The Suspects (并查集)
    POJ 2236 Wireless Network (并查集)
    Iptables-linux服务器做路由转发
    asdf
  • 原文地址:https://www.cnblogs.com/maijin/p/5337516.html
Copyright © 2011-2022 走看看