问题标签 [ef-core-6.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
125 浏览

c# - Entity Framework Core 6(预览版)迫使我使用 .AsEnumerable()

我已经在我的项目中从 .net5 更新到 .net6 预览版,但我遇到了 Entity Framework Core 的问题。

这些查询在 EF Core 5 中运行良好,但是,它们迫使我.AsEnumerable()在 EF Core 6 中工作,它使用的内存是以前使用的两倍。看起来应该可以做到(特别是因为它在 EF Core 5 中运行良好),也许我应该配置一些不同的东西来进行这些查询?

更新: 这是在没有 .AsEnumerable() 的情况下引发的异常

LINQ 表达式 'DbSet() .Where(o => DbSet() .Where(f => f.PostedDate >= __DateSince_0 && f.PostedDate <= __DateUntil_1) .Select(f => f.OrderID) .Contains(o .OrderID))' 无法翻译。
以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2101038

0 投票
1 回答
92 浏览

c# - EF Core 全局查询过滤器复杂表达式

我正在尝试在我的应用程序中为租户实现全局查询过滤器。我AssessmentModels可以拥有多个所有者,这些所有者来自我无法完全控制的第 3 方,但可以根据需要进行调整。(并且可以在我保存到我的数据库之前进行操作)现在,Owners存储为分号分隔的字符串(例如,team1;team2)。

我想出了以下适用于选择数据的方法,但不适用于全局查询过滤器:

所以, var result = db.Assessments.Where(predicateExpression).ToList();工作,但modelBuilder.Entity<AssessmentModel>().HasQueryFilter(predicateExpression);给出了错误:

0 投票
1 回答
101 浏览

entity-framework - 无法使用 EF Core 6 添加迁移

我已经安装了 Visual Code 2022 预览版(17.1)。我在https://docs.microsoft.com/en-us/ef/core/get-started/overview/first-app?tabs=netcore-cli之后创建了一个简单的控制台应用程序

当我尝试添加迁移时,出现以下错误

为什么要 dot net 2.0?

0 投票
1 回答
65 浏览

c# - 升级到 EF Core 6.0 后,拥有的实体导致 InvalidOperationException

将Microsoft.AspNetCore.Identity.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.ToolsNpgsql.EntityFrameworkCore.PostgreSQL块升级到版本6.0.0后,我的 .NET 6.0 Web API 开始抛出此异常:

实体类型“RefreshToken”已被标记为拥有,必须通过导航从另一个实体类型引用。将导航添加到指向“RefreshToken”或不将其配置为拥有的实体类型。

每当执行任何涉及数据库的操作时,似乎都会引发异常。如果我正确理解错误,它不会在 RefreshToken 实体配置中找到导航,但是我自动生成的 ModelSnapshot 似乎确实包含它。

RefreshToken.cs(为简化起见,删除了一些属性)

用户.cs

摘自 BuildModel(ModelBuilder modelBuilder)

我查看了 EF Core 6.0 重大更改(https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-6.0/break-changes#owned-index)但是找不到会导致此问题的原因。

0 投票
0 回答
26 浏览

visual-studio - 如何在 Visual Studio 中创建具有匿名历史记录表的临时表

我有一个以前的 SQL Server DB 项目,我正在尝试将其转换为使用临时表。由于这个项目还没有部署,我打算用这个项目的新出版物替换我当前的实例。

使用“使用匿名历史表创建临时表”中的信息,我已将以下代码行添加到我的数据库创建表中。

例子:

在 MS SSMS 中执行此代码运行良好,但在 Visual Studio 中会生成以下错误并阻止我构建项目。

是否需要更改设置以允许创建数据库项目anonymous history tables

0 投票
2 回答
438 浏览

c# - GroupBy 与 EF Core 6.0 和 SQL Server

我有一个 Blazor Web 应用程序,它已经在该领域工作了几个月。我想将数据库查询扩展到类似的“检测”组。

它是从 .NET 5 开始编写的,而就在今天已更新到 .NET 6 试图使其正常工作。

我想知道如何获得按TimeStamp(DateTime 属性)排序的结果。我有一个内存数据库的工作示例,但生产将在 SQL Server 中。我在 SQL 方面不是很好,但我在 Management Studio 中玩了一段时间,但没有运气。

正确地注释掉OrderByDescending()组的事情,但结果的顺序不正确。似乎 EF 翻译过程完全删除了该行,它对生成的查询或结果集没有任何影响。

如果有任何问题:

  • Visual Studio 2022 (4.8.04084)
  • .Net 6.0
  • SQL Server 2019 (15.0.2080.9)
  • *所有与 EF 相关的 NuGet 包均已更新至 6.0

编辑澄清
上面的代码段产生以下 SQL 查询。

它产生类似于以下的结果。注意不按时间排序。

如果我ORDER BY [t0].TimeStamp DESC在 Management Studio 中的 SQL 查询末尾添加,我会得到我正在寻找的结果(见下文)。我只需要知道如何在 LINQ 中编写它。

.OrderByDescending(det => det.Detection.TimeStamp)在最后添加ToList()是我的第一个想法,但“无法翻译”。我需要对这些结果进行分页,所以我真的很想在 SQL 中进行排序。

0 投票
1 回答
16 浏览

ef-core-6.0 - 在 EF Core 6.0 中测试表 IsTemporal

EF Core 6.0 现在支持 IsTemporal(),它允许您使用 MS-SQL 历史记录表。在提交数据之前,我使用 DbContext.OnBeforeSaving() 来验证某些字段。如果表是临时表,那么我想保存更新此行的人的 UserId。

我如何测试表是否是临时的?(即通过下面的伪代码)

0 投票
3 回答
218 浏览

entity-framework-core - EF 核心 6 选择空值,尽管 where 子句要求不为空

我有一个这样的 Linq2Sql 查询:

在从 EF 核心 5 移动到 EF 核心 6 之前,这工作得很好。使用 EF 核心 6,结果列表包含一些空值(不应该是这种情况,因为 where 条件要求不为空)。EF 核心 6 中是否有一些我不知道的重大更改/限制,或者这只是一个错误?

更新:这是输出的摘录

在此处输入图像描述

更新 2:这是生成的 SQL 语句

所以看起来问题是SomeOtherNullableDateTime(应该不为空)甚至没有包含在生成的 SQL 的 where 子句中。

更新 3:这是 SQL EF 核心 5(正确)生成

0 投票
1 回答
84 浏览

ef-core-6.0 - EF Core 6 - System.InvalidOperationException:无法保存更改,因为在要保存的数据中检测到循环依赖

为了简单起见,假设我必须进行项目:

  • WebAPI 和
  • WebAPI 的单元测试

这两个项目都使用 EF Core 5。WebAPI 使用 SqlServer,UnitTest 使用 Sqlite (inMemory)。这两个项目都能正常工作。

我从 EF Core 5 迁移到 EF Core 6,现在 WebAPI 可以正常工作,但我无法执行任何单元测试。我收到以下错误:

System.InvalidOperationException:无法保存更改,因为在要保存的数据中检测到循环依赖:'Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation -> Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation -> Microsoft.EntityFrameworkCore.Migrations。 Operations.CreateTableOperation -> Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation'.. 在 Microsoft.EntityFrameworkCore.Utilities.Multigraph 2.ThrowCycle(List1 循环,Func 2 formatCycle, Func2 formatException)在 Microsoft.EntityFrameworkCore.Utilities.Multigraph 2.TopologicalSort(Func4 tryBreakEdge,Func 2 formatCycle, Func2 formatException)在 Microsoft。 EntityFrameworkCore.Utilities.Multigraph2.TopologicalSort(Func4 tryBreakEdge) 在 Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.GetDifferences(IRelationalModel source, IRelationalModel target) 在 Microsoft.EntityFrameworkCore.Storage 的 Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Sort(IEnumerable`1 操作,DiffContext diffContext)。 RelationalDatabaseCreator.GetCreateTablesCommands(MigrationsSqlGenerationOptions options) 在 Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.CreateTables() 在 Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.EnsureCreated() 在 Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureCreated()

循环引用似乎发生在 Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation 内部,并且由于 WebAPI 项目有效,我认为这是 Sqlite 提供程序的问题。

当在 DbContext 的OnModelCreating方法中执行 EF 配置时,似乎会发生该错误。此时,没有尝试保存/更新和实体。EF 配置期间单元测试失败。

在这一点上,我对如何继续一无所知。我们有大约 100 种配置,例外中没有提供更多信息。由于一切都在 EF Core 5 上运行,我假设它要么是重大更改(特定于 Sqllite),要么是 EF Core 6 中的错误。

有人遇到过这个问题吗?o 有人对如何找出问题的原因有任何想法吗?

非常感谢任何帮助。

0 投票
1 回答
107 浏览

c# - 如何修复从 EF Core 3 迁移到 EF Core 6 导致循环中断的查询

从 EF Core 3 迁移到 EF Core 6 后,此查询:

开始抛出错误:

System.InvalidOperationException:跟踪查询正在尝试在其结果中投影没有相应所有者的自有实体,但如果没有其所有者,则无法跟踪自有实体。要么在结果中包含所有者实体,要么使用“AsNoTracking”使查询不跟踪。

更改为“AsNoTracking()”会产生另一个错误:

System.InvalidOperationException:包含路径“MetaProduct->Variations”导致循环。无跟踪查询中不允许循环;使用跟踪查询或删除循环。

关系配置:

如何解决?