EF新增实体后没有导航属性
在新增一个实体之后,需要马上对这个实体进行审核操作,审核操作时需要读取实体的导航属性,就在审核读取导航属性时为空报错了。
问题纠结就在于:
如果用table追踪去查询的话,EF会直接读取缓存里面的数据,所以查出来的实体实际上还是我们新增的那个,被没有导航属性;
用TableNoTracking不追踪的查询的话,能直接读取数据库的数据,及导航属性有值,但是问题在于我们查询出来的这个实体是没办法进行修改活删除操作的,因为他是无状态的。
解决办法:
我们可以将新增的实体先提交然后将新增的实体的追踪状态去掉DbContext.Entry(entity).State = EntityState.Detached,
然后再使用Table去查询,这样我们查出来的实体导航属性就是已经有值的了。
不过这样会导致没有事务了,如果审核时报错了,实体也已经新增进去了
endProductProduceIn.UpdateQtyAndCount();//数量重算 endProductProduceIn.CheckAudit();//审核检查 Repository.Insert(endProductProduceIn);//新增 RepositoryContext.Commit();//提交 endProductProduceIn.Items.ToList().ForEach(_endProductProduceInRepository.Detached);//去掉子表追踪 Repository.Detached(endProductProduceIn);//去掉主表追踪 var entity = Repository.Table.First(a => a.UUID == endProductProduceIn.UUID);//重新查找 entity.Audit(WorkContext.User.UserId);//进行审核操作 RepositoryContext.Commit();//再次提交