配置使用EF6.0常见的一些问题及解决方案
作者:网络转载 发布时间:[ 2016/1/26 14:00:31 ] 推荐标签:软件测试管理 配置管理
解决方案
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 而是实体
[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是可以直接点出来的了
总结
以上是我遇到的众多问题之一,限于篇幅和时间,暂时记录到这里吧。如果有什么理解错误的地方,还望指正!!!
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11