配置使用EF常见的一些问题及解决方案_MySQL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了配置使用EF常见的一些问题及解决方案_MySQL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3078字,纯文字阅读大概需要5分钟。
内容图文
![配置使用EF常见的一些问题及解决方案_MySQL](/upload/InfoBanner/zyjiaocheng/582/5db1add5dd12498caafd63642af40932.jpg)
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数据库:
4.查看编译后的目录中是否有这2个dll,如果没有,手动拷贝进去
提示表名无效
有时候新加了一个实体类,数据库也相应加了一个表。然后理所当然的运行增加数据,结果就出现这提示
排查过程
然后又是一阵排查,再次确认了数据库中确实存在表,还手动存进去了一条数据。再跑到BaseContext:DbContext这个类里面一阵 翻,确定已经有 public DbSet
解决方案
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
_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 而是实体
[Key] public int EmpId { get; set; } ////// 姓名 /// public string EmpName { get; set; } ////// 性别 /// public string Sex { get; set; } ////// 生日 /// public DateTime BirthDay { get; set; } ////// 部门 /// public int DepId { get; set; } ////// 关联主表 /// [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
Dept.name是可以直接点出来的了
内容总结
以上是互联网集市为您收集整理的配置使用EF常见的一些问题及解决方案_MySQL全部内容,希望文章能够帮你解决配置使用EF常见的一些问题及解决方案_MySQL所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。