该接口主要实现,专家数据修改功能,需验证该专家身份证是否重复问题,若重复则提示:该身份证号已存在,若不存在重复的情况,则修改专家信息。
try { var result = _repository.GetAllList().Where(e => e.IDNumber == input.IDNumber && e.IsDeleted == false && e.Id != input.Id).ToList(); if (result.Count() > 0) { //该身份证号已存在 throw new UserFriendlyException("该身份证号已存在!!"); } else { return base.Update(input); } } catch (Exception e) { throw new UserFriendlyException(e.Message); }
"message": "The instance of entity type 'Expert' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.",
翻译为:无法跟踪实体类型“Expert”的实例,因为已在跟踪另一个具有相同{'Id'}键值的实例。当给定实体附加一个实例时,请确保只附加一个实体值。考虑使用'DbCOnTestOptionsBuilder.EnableSensitiveCatalogging'以查看冲突的键值。
try { var exists = _repository.GetAll().Any(e => e.IDNumber == input.IDNumber && e.IsDeleted == false && e.Id != input.Id); if (exists) { //该身份证号已存在 throw new UserFriendlyException("该身份证号已存在!!"); } else { var updatedEntity = ObjectMapper.Map<Expert>(input); var entity = _repository.UpdateAsync(updatedEntity); return Task.FromResult<DetailExpertDto>(entity.Result.MapTo<DetailExpertDto>()); } } catch (Exception e) { throw new UserFriendlyException(e.Message); }
try { var exists = _repository.GetAll().Where(e => e.IDNumber == input.IDNumber && e.IsDeleted == false && e.Id != input.Id); if (exists.Count() > 0) { //该身份证号已存在 throw new UserFriendlyException("该身份证号已存在!!"); } else { return base.Update(input); } } catch (Exception e) { throw new UserFriendlyException(e.Message); }
IQueryable和IEnumerable都是延时执行(Deferred Execution)的,而IList是即时执行(Eager Execution)
IQueryable和IEnumerable在每次执行时都必须连接数据库读取,而IList读取一次后,以后各次都不需连接数据库。前两者很容易造成重复读取,性能低下,并且可能引发数据不一致性
IQueryable弊端:当把查询出来的数据,根据指定条件添加到其他表中时,会报连接以打开错误!原因:IQueryable在每次执行时都必须连接数据库读取,所以数据库连接是一直开着的!
以下代码会报错,错误代码数据库连接已经打开无法插入数据:
public IQueryable<Et_ErrorType> ErrorTypeSelect()
{
IQueryable<Et_ErrorType> Br = from B in nContext.Et_ErrorType
select B;
return Br;
}
var aa=ErrorTypeSelect();
foreach(var kk in aa)
{
if(kk.type=="400")
{
//添加语句
}
}