【问题标题】:The entity type 'EntityQueryable<Entrys>' was not found. Ensure that the entity type has been added to the model找不到实体类型“EntityQueryable<Entrys>”。确保实体类型已添加到模型中
【发布时间】:2021-11-15 18:56:02
【问题描述】:

我有一个场景,我有用户将条目提交到 epi 端点,并且数据库上的标志更新为 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 而不会出现上述错误,已经尝试研究没有运气做远。提前谢谢你

【问题讨论】:

  • .AsQueryable()改为ToList()

标签: c# .net-core entity-framework-core


【解决方案1】:

您的实现中的 @arrif,您好

将 _context.Add(pastSurveys); 更改为 _context.UpdateRange(pastSurveys);

根据您当前的设置,您添加而不是更新标志。试试看,看看它是否有效,干杯

【讨论】:

  • 实际上使用 EF Core 你根本不需要调用UpdateRange
  • 嗨@SvyatoslavDanyliv 这个作品
  • 我知道这行得通,但只要删除UpdateRange,它也行得通。还要将 AsQueryable 更改为 ToList,因为您正在向 SQL Server 发起两个查询 - 对性能不利。
  • 我将更新范围改为@SvyatoslavDanyliv?
  • 什么都不做,改变对象属性然后调用SaveChanges。 ChangeTracker 将找到更改的对象并应自动发送更新。
【解决方案2】:

问题是您插入实体而不是更新实体。你也不需要两个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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多