前言 近做了个winform小项目,为方便快速开发,后台框架使用了ef6.0+sqlserver2008架构,遇到各种问题,真是伤脑筋。现将遇到问题和解决方案写下来,方便查阅 提示未注册,找不到驱动程序 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后还是没有用,折腾了个把小时,后突然看了一眼binDebug目录,发现只有一个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个实体之间的差别。后终于发现。。。实体类没有和数据库关联