提示表名无效
有时候新加了一个实体类,数据库也相应加了一个表。然后理所当然的运行增加数据,结果就出现这提示
排查过程
然后又是一阵排查,再次确认了数据库中确实存在表,还手动存进去了一条数据。再跑到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 而是实体
[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("DepId")] public Dept Dept { get; set; } //注意:ForeignKey("DepId")中的DepId 就是员工类的外键 |