转自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. 常见ORACLE错误,及解决方案(遇则即时更新)

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

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

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

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

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

  4. Caffe+CUDA7.5+CuDNNv3+OpenCV3.0+Ubuntu14.04 配置参考文献 以及 常见编译问题总结

    Caffe+CUDA7.5+CuDNNv3+OpenCV3.0+Ubuntu14.04  配置参考文献 ---- Wang Xiao Warning: Please make sure the cud ...

  5. Linux 下安装配置nginx及常见问题解答

    其实也不能完全算是原创吧!都是我配置nginx时所遇到的问题,查阅资料后总结起来.即是巩固一下nginx的配置,也是分享给新入Linux的童鞋们一些知识 好了,不多废话,进入主题吧! 为nginx添加 ...

  6. ubuntu下Qt之android环境配置以及一些常见问题解决

    准备材料有: 1. qt for android 5.×版本,下载地址如下,可以选择一个合适自己机器型号的版本进行下载. 地址:http://www.qt.io/download-open-sourc ...

  7. 配置FindBugs和常见FindBugs错误

    配置FindBugs: 在这里可以对FindBugs规则等进行详细设置. 选择你的项目,右键 => Properties => FindBugs => 1 Run Automatic ...

  8. linux学习(二)linux配置网卡以及常见网络问题排查

    实验环境环境:mac,vmware fusion 一.常用的虚拟机网络连接模式. NAT:推荐方式.它可以使你在切换网络环境(比如在工作中和家里)时,不需要修改虚拟主机的配置,而维持正常的上网功能. ...

  9. FHS目录配置下,常见的几个问题及解答

    请说明/bin与/usr/bin目录所放置的执行文件有何不同之处? /bin主要放置在开机时,以及进入单人维护模式后还能够被使用的指令,至于/usr/bin则是大部分软件提供的指令放置处. 请说明/b ...

随机推荐

  1. C++重载new和delete运算符

    内存管理运算符 new.new[].delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内 ...

  2. Xcode LLDB 调试Tips

    1.  bt -- 显示当前线程调用堆栈 2.  e -- 执行表达式,动态修改当前线程变量的值 3.  frame variable -- 打印当前堆栈所有变量值 4.  expr -O --lan ...

  3. iOS多线程之3.NSThread的线程间通信

      我们把一些耗时操作放在子线程,例如下载图片,但是下载完毕我们不能在子线程更新UI,因为只有主线程才可以更新UI和处理用户的触摸事件,否则程序会崩溃.此时,我们就需要把子线程下载完毕的数据传递到主线 ...

  4. 高通AR增强现实Unity3D

    AR: 增强现实,台湾翻译叫做扩张实境 1.注册.然后下载sdk(注册账号主要是为了第3步中制作识别图而用的) 下载地址:https://developer.vuforia.com/resources ...

  5. android_demo之生成颜色布局

    前面学习了动态生成表格,不单单是要动态生成控件,也同时生成一个事件. 接下来用个小小栗子去了解这个知识点. <LinearLayout xmlns:android="http://sc ...

  6. PHP的学习--生成器Generators

    生成器总览 (PHP 5 >= 5.5.0, PHP 7) 生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低. 生成器允 ...

  7. ubuntu dpkg 依赖问题处理

    ubuntu dpkg 依赖问题处理 使用 apt-get 安装软件期间,如果出现意外中断的情况,下次安装时会出现 dpkg 的一系列依赖问题,提示如下 :: dpkg: error processi ...

  8. 四则运算(Android)版

    实验题目: 将小学四则运算整合成网页版或者是Android版.实现有无余数,减法有无负数.... 设计思路: 由于学到的基础知识不足,只能设计简单的加减乘除,界面设计简单,代码量少,只是达到了入门级的 ...

  9. C#入门经典第五版之变量与表达式编码题训练

    问题:编写一个控制台应用程序,要求用户输入4个int值,并显示它们的乘积.提示:可以使用Convert.ToDouble()命令,把用户在控制台上输入的数转换为double, 以此类推,转换成int命 ...

  10. DOM系列---DOM操作表格

    DOM在操作生成HTML上,还是比较简明的.不过,由于浏览器总是存在兼容和陷阱,导致最终的操作就不是那么简单方便了.本篇章主要了解一下DOM操作表格. 一.操作表格 <table>标签是H ...