我有一个场景,我有用户向API端点提交条目,并且数据库上的标志更新为1。一个用户可以提交多于每次有感觉和需要的条目。我有一个检查条目是否已经存在的逻辑,如果用户提交了另一个表单,那么前一个表单被设置为0,新表单被设置为1。每当我提交第二个条目时,就会出现错误
未找到实体类型"EntityQueryable"。确保实体类型已添加到模型中。在Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.GetOrCreateEntry(对象实体)
这是我检查
的逻辑public async Task<Entrys> AddEntrys(Entrys entrys)
{
var pastSurveys = _context.Entrys.Where(e => e.UpdatedBy == entrys.UpdatedBy && e.Month == entrys.Month
&& e.Day == entrys.Day && e.Year == entrys.Year && e.CurrentStatus==true).AsQueryable();
if (pastSurveys.Count() > 0)
{
foreach (Entrys e in pastSurveys)
{
if (e.CurrentStatus == true)
{
e.CurrentStatus = false;
}
}
_context.Add(pastSurveys);
_context.SaveChanges();
}
entrys.Id = Guid.NewGuid().ToString();
_context.Add(entrys);
_context.SaveChanges();
return entrys;
}
我怎么能有我的逻辑继续检查现有的调查,并将其更新为0,而新的设置为1没有得到上面的错误,已经尝试研究没有运气做得远。提前谢谢你
问题不是更新实体而是插入它们。你也不需要两次SaveChanges
调用。pastSurveys.Count()
也执行不需要的查询。
纠正方法:
public async Task<Entrys> AddEntrys(Entrys entrys)
{
var pastSurveys = _context.Entrys
.Where(e => e.UpdatedBy == entrys.UpdatedBy && e.Month == entrys.Month
&& e.Day == entrys.Day && e.Year == entrys.Year && e.CurrentStatus == true)
.ToList();
foreach (Entrys e in pastSurveys)
{
e.CurrentStatus = false;
}
entrys.Id = Guid.NewGuid().ToString();
_context.Add(entrys);
_context.SaveChanges();
return entrys;
}
嗨@ arrival from your implementation
将_context.Add(pastSurveys);
改为_context.UpdateRange(pastSurveys);
从当前设置中添加而不是更新标志。试一下,看看它是否有效,干杯