项目使用 core 2.1 版本,ef 也是支持 延迟加载了
调试一个查询页面 出现如下问题,
MySqlException: Unknown column 'p.PPX_FreightTemplateId' in 'field list'
基本的查询ef 语句就是 var list = Context.ProductInfo.ToList();
ProductInfo 的定义里边是有FreightTemplateId属性,DB表里也存在该字段,bigint(20) --> long, 同时 还有一个 public virtual FreightTemplateInfo PPX_FreightTemplate { get; set; } 的定义(DB里边有 PPX_FreightTemplate 表,同时 PPX_FreightTemplate 类中也有 public virtual ICollection<ProductInfo> PPX_Products { get; set; } 的定义)。
FreightTemplateId这个字段在三个model里边出现过,但是对应的表里边 也都有字段定义,
搜索整个项目,没有 PPX_FreightTemplateId 的定义,所以这个错误是指哪里的定义在DB中不存在?
PPX_FreightTemplate
类有没有 Id
或 PPX_FreightTemplateId
字段,如果没有,需要通过 builder.Entity<PPX_FreightTemplate>().HasKey()
定义一下主键字段
每个类都有定义id 字段的,
继承了 baseModel
public long Id { get; set; }
如果有两个主子表,A 和 B, A是主表,对应B的多个记录,那么是不是 model是这样定义
class A
{
public virtual ICollection<B> BList{get;set;}
}
class B
{
public A ObjA {get;set;}
}
是没有拉外键的关系导致的吗? product 表里边没有创建 FreightTemplate 的外键,dbcontext 里边也没有定义 entity.HasForeignKey .... 这个东西
找到问题了,model 里边 互相定义了 外键引用关系,类似
class A
{
public virtual ICollection<B> BList{get;set;}
}
class B
{
public A ObjA {get;set;}
}
,但是Builder 里边没有定义两者的外键关系,DB里边也没创建这个外键关系,因此ef 从代码上认为有外键引用关系,自动用默认的 外键对象+Id 作为外键字段去执行了,所以会报找不到这个 字段