转自http://www.2cto.com/database/201511/449573.html

提示未注册,找不到驱动程序

No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'. Make sure the provider is registered in the 'entityFramework' section of the application config file.
这个问题比较坑,我根据上面的提示,跑到配置文件去查看,看有没有entutyFramework节点,是否注册驱动。结果按照网上的解决方案 把配 置文件贴上去了还是报错,然后再查看EntityFramework.SqlServer.dll是否已经引用到数据访问层类库中,也在。这下就懵逼了, 到底上面情况,网上各种搜,比如把EntityFramework.SqlServer.dll的赋值到本地属性设为True后还是没有用,折腾了个把小 时,最后突然看了一眼bin\Debug目录,发现只有一个EntityFramework.dll文件,没有 EntityFramework.SqlServer.dll,我就瞬间释然了,原来是这样。。。
 
解决方案:
 
1.检查是否引入EntityFramework.dll 和EntityFramework.SqlServer.dll
 
2.检查是否设为复制到本地属性为True
 
3.检查配置文件是否注册驱动
 
如我的是sqlserver数据库
 
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
 
4.查看编译后的目录中是否有这2个dll,如果没有,手动拷贝进去
 
提示表名无效
 
有时候新加了一个实体类,数据库也相应加了一个表。然后理所当然的运行增加数据,结果就出现这提示
排查过程
 
然后又是一阵排查,再次确认了数据库中确实存在表,还手动存进去了一条数据。再跑到BaseContext:DbContext这个类里面一阵 翻,确定已经有  public DbSet<Employee>a_Emp { get; set; }这个属性了。又跑到实体类中确认字段是否吻合,主键[key]标记是否已经标了。最后又对比了之前的项目2个实体之间的差别。最后终于发现。。。实体类 没有和数据库关联
 
解决方案
 
1.确认数据库表是否存在
 
2.确认BaseContext:DbContext类中是否有属性
 
3.确认实体类中字段与主键
 
4.确认实体于数据库表是否关联
 
[Table("a_Emp")]
public class Employee
 
另:实体类上面的[table]小括号里面的就是数据库的表名,并且该标记需要引用dll
 
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
数据库字段记录为null时 ef 操作数据库报错
错误排查
 
这个问题是数据库字段为空导致的,ef 反射赋值时实体时发生的错误,如:ToList()、
 
_db.Set<TEntity>().AddRange(entry);
_db.SaveChanges();
 
解决方案
 
2种任选一种
 
1.将数据库所有字段都赋值,不存在为空的情况 自然不会报错,但毕竟繁琐
 
2.将数据库中可空字段再实体中用可空类型表示
 
如:
 
public DataTime? CreateTime{get;set;}
public int? Num{get;set;}
public decimal? Pirce{get;set;}
 
目前我知道的就这2种,应该够用了
 
EF中的外键
 
外键是常用的数据关联形式,在数据访问中占据重要位置,下面来看看使用外键的几个步骤
 
一、将2个实体类都准备好,一个主键表一个外键表,例如 员工表中需要部门编号 那么就需要准备员工类和部门类
 
二、在员工实体类Employee中加入一个对象实体,加一个部门Id,没错,不是一个单纯的部门ID 而是实体
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  [Key]
      public int EmpId { get; set; }
      /// <summary>
      /// 姓名
      /// </summary>
      public string EmpName { get; set; }
      /// <summary>
      /// 性别
      /// </summary>
      public string Sex { get; set; }
      /// <summary>
      /// 生日
      /// </summary>
      public DateTime BirthDay { get; set; }
          
      /// <summary>
      /// 部门
      /// </summary>
      public int DepId { get; set; }
 
/// <summary>
      /// 关联主表
      /// </summary>
      [ForeignKey("EmpId")]
      public Dept Dept { get; set; } //注意:ForeignKey("EmpId")中的EmpId 就是员工类的主键
四、Dept部门表中必须有主键
 
五、调用的时候
 
db.a_Emp.Include("Dept").Where(l => l.Dept.name.Contains(name)||string.IsNullOrEmpty(name)).ToList()
 
其中a_Emp是员工类的实体对象,在baseContext里面的 public DbSet<Employee>a_Emp { get; set; }
 
Dept.name是可以直接点出来的了

配置使用EF常见的一些问题及解决方案的更多相关文章

  1. 10.翻译系列:EF 6中的Fluent API配置【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/fluent-api-in-code-first.aspx EF 6 Code-Firs ...

  2. Ubuntu下Linux配置内核各种常见错误和解决办法

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 这篇把Ubuntu下Linux配置内核各种常见错误和解决办法给大家讲解一下,希望可以帮助到大家. 一.Ubuntu系统中缺少各种依赖包导致的问题 1 ...

  3. 常见ORACLE错误,及解决方案(遇则即时更新)

    1.当登陆时提示“ORA-03113:通信通道的文件结束”时:        解决方案:                     需在X:\oraclexe\app\oracle\product\10 ...

  4. Linux配置完iptables后,重启失效的解决方案

    Linux配置完iptables后,重启失效的解决方案 因为只有root用户才可访问1024以下的端口,非root用户登陆是不能启用80端口的.web service 往往启动1024以上的端口,并通 ...

  5. Android开发——常见的内存泄漏以及解决方案(二)

    )Android2.3以后,SoftReference不再可靠.垃圾回收期更容易回收它,不再是内存不足时才回收软引用.那么缓存机制便失去了意义.Google官方建议使用LruCache作为缓存的集合类 ...

  6. php安全配置记录和常见错误梳理

    通常部署完php环境后会进行一些安全设置,除了熟悉各种php漏洞外,还可以通过配置php.ini来加固PHP的运行环境,PHP官方也曾经多次修改php.ini的默认设置.下面对php.ini中一些安全 ...

  7. 配置使用EF6.0常见的一些问题及解决方案

    前言 最近做了个winform小项目,为方便快速开发,后台框架使用了ef6.0+sqlserver2008架构,遇到各种问题,真是伤脑筋.现将遇到问题和解决方案写下来,方便查阅 提示未注册,找不到驱动 ...

  8. T4模板的一些配置(从EF数据更新)

    <#@ template debug="false" hostspecific="false" language="C#" #> ...

  9. Java学习笔记2、环境变量配置与初学者常见错误

    2.1 环境变量的配置   2.1.1 path环境变量配置的作用 程序的执行需要使用外部指令javac,但是javac指令仅仅能在JDK安装目录下的bin目录下运行,因此程序只能写入bin目录程序开 ...

随机推荐

  1. django request对象和HttpResponse对象

    HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外)HttpRequest.scheme 请求方案(通常为http或https)HttpRequest.body 字 ...

  2. 分布式数据库Hbase

    HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. HBase是Goog ...

  3. 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  4. ubuntu16.04装MatConvNet

    按matconvnet官网上的步骤来,编译代码的时候会发现编译失败. 参考这条issues 以下是我的解决方案: I use ubuntu16.04 with x64 architecture. I ...

  5. Map工具系列-01-Map代码生成工具说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  6. VisualStudio配色方案

    最近发现一个很神奇的网站,可以方便的为VisualStudio配色:Studio Styles - Visual Studio color schemes 可以下载一份自己喜欢的配色方案 如果还不满意 ...

  7. miniui前台无法显示数据

    坑爹,刚开始使用miniui重写对账单的功能,显示数据的时候明明已经获取到json数据了,但前台还是显示不出来,找了一上午的原因,终于找到是因为前台显示字段的field值要改成和json中(数据库字段 ...

  8. <<< Jquery查找元素、选择器使用方法总结

    $("#myDiv"); //根据给定的ID匹配一个元素,用于搜索id 属性中给定的值,id属性必须是唯一的 $("div"); //根据给定的元素名匹配所有元 ...

  9. 静态关键字static(2)

    static关键字主要有两种作用: 第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 具体而言,在Java语言中,static ...

  10. sql 的实用函数(包含日期函数、截取字符串函数)

    CONVERT() 函数是把日期转换为新数据类型的通用函数. CONVERT() 函数可以用不同的格式显示日期/时间数据. 语法 CONVERT(data_type(length),data_to_b ...