问题标签 [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.
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。
c# - EF Core 全局查询过滤器复杂表达式
我正在尝试在我的应用程序中为租户实现全局查询过滤器。我AssessmentModels
可以拥有多个所有者,这些所有者来自我无法完全控制的第 3 方,但可以根据需要进行调整。(并且可以在我保存到我的数据库之前进行操作)现在,Owners
存储为分号分隔的字符串(例如,team1;team2
)。
我想出了以下适用于选择数据的方法,但不适用于全局查询过滤器:
所以,
var result = db.Assessments.Where(predicateExpression).ToList();
工作,但modelBuilder.Entity<AssessmentModel>().HasQueryFilter(predicateExpression);
给出了错误:
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?
c# - 升级到 EF Core 6.0 后,拥有的实体导致 InvalidOperationException
将Microsoft.AspNetCore.Identity.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Tools和Npgsql.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)但是找不到会导致此问题的原因。
visual-studio - 如何在 Visual Studio 中创建具有匿名历史记录表的临时表
我有一个以前的 SQL Server DB 项目,我正在尝试将其转换为使用临时表。由于这个项目还没有部署,我打算用这个项目的新出版物替换我当前的实例。
使用“使用匿名历史表创建临时表”中的信息,我已将以下代码行添加到我的数据库创建表中。
和
例子:
在 MS SSMS 中执行此代码运行良好,但在 Visual Studio 中会生成以下错误并阻止我构建项目。
是否需要更改设置以允许创建数据库项目anonymous history tables
?
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 中进行排序。
ef-core-6.0 - 在 EF Core 6.0 中测试表 IsTemporal
EF Core 6.0 现在支持 IsTemporal(),它允许您使用 MS-SQL 历史记录表。在提交数据之前,我使用 DbContext.OnBeforeSaving() 来验证某些字段。如果表是临时表,那么我想保存更新此行的人的 UserId。
我如何测试表是否是临时的?(即通过下面的伪代码)
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(List
1 循环,Func2 formatCycle, Func
2 formatException)在 Microsoft.EntityFrameworkCore.Utilities.Multigraph2.TopologicalSort(Func
4 tryBreakEdge,Func2 formatCycle, Func
2 formatException)在 Microsoft。 EntityFrameworkCore.Utilities.Multigraph2.TopologicalSort(Func
4 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 有人对如何找出问题的原因有任何想法吗?
非常感谢任何帮助。
c# - 如何修复从 EF Core 3 迁移到 EF Core 6 导致循环中断的查询
从 EF Core 3 迁移到 EF Core 6 后,此查询:
开始抛出错误:
System.InvalidOperationException:跟踪查询正在尝试在其结果中投影没有相应所有者的自有实体,但如果没有其所有者,则无法跟踪自有实体。要么在结果中包含所有者实体,要么使用“AsNoTracking”使查询不跟踪。
更改为“AsNoTracking()”会产生另一个错误:
System.InvalidOperationException:包含路径“MetaProduct->Variations”导致循环。无跟踪查询中不允许循环;使用跟踪查询或删除循环。
关系配置:
如何解决?