问题标签 [ef-core-3.1]

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 回答
5417 浏览

c# - 迁移到 .net core 3.1 后 EF OrderBy 出现问题

考虑这段代码:

这样,无论谁发送消息,我都会按用户的 ID 对用户的所有对话进行分组。然后我在组内按 SentAt 日期排序消息,并从每个对话中选择最后一条消息。问题是这段代码有效,而且更多的是它把它全部翻译成纯 T-Sql(我使用 SQL Server Profiler 来检查)。但后来我决定将我的项目从 Core 2.1 移到 3.1,现在我得到了这个:

LINQ 表达式 '(GroupByShaperExpression: KeySelector:

无法翻译。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038

任何解决此问题的想法将不胜感激。

PS 我知道我可以深入研究 T-SQL 并为其编写存储过程,但我仍在寻找一种使用 Linq to Entity 实现它的方法。

0 投票
1 回答
6614 浏览

c# - EF Core 3 DbQuery 等效功能

在 ef core 2.2 中,我使用 DbQuery 将原始 sql 结果映射到对象,如下所示:

接着

这不会创建任何额外的表并且工作得很好。在 ef core 3.1 中,DbQuery 已过时,并告诉我改用无键 DbSet。我已将其配置如下:

并在模型创建中

但这将在新数据库迁移中创建一个新表,如果我告诉 ef 忽略此实体,如下所示

我不能使用_dbContext.SimpleQM.FromSqlRaw();它会抛出异常并告诉模型不包含在上下文中。如何在 ef core 3.1 中实现相同的功能?

0 投票
2 回答
392 浏览

c# - EF Core 3.1“类型参数约束中的可空性......”接口和 DbContext 问题

我有一个使用 EF Core 3.1 的 .NET Core 3.1 程序集项目,它启用了可为空的引用类型。我创建了以下界面:

我在我的上下文类中实现了这个接口:

由于 DbContext 基类已经有一个带有这个签名的方法,我实际上不需要在 MyDbContext 类中实现任何东西。

我收到以下警告:

方法“DbSet Microsoft.EntityFrameworkCore.DbContext.Set()”的类型参数“TEntity”的约束为空性与接口方法“DbSet MyProject.IMyDbContext.Set()”的类型参数“T”的约束不匹配。考虑改用显式接口实现。

我确认这是由我的项目使用可为空的引用类型引起的,而 EF Core 并没有通过从项目文件中删除以下内容:

一旦我这样做了,警告就消失了。

我尝试将界面更改如下:

但没有运气。

有没有办法让这个警告消失而不从我的项目中删除可为空的引用类型?

0 投票
2 回答
190 浏览

c# - 如何与 EF Core 建立关系 (0,N:1,1)?

问题是“一个作者可能没有或有很多书,但一本书绝不是由两个或多个作者写的。”

错误:无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型 BookManager.Catalog.Data

0 投票
1 回答
6393 浏览

entity-framework - 如何使用 EF 3.1 为实体框架 GroupBy 中的每个组选择前 N 行

我需要在具有实体框架的表中为每个组获取前 10 行。基于 SO 上的其他解决方案,我尝试了两件事:

错误:

错误:

System.InvalidOperationException: 'NavigationExpandingExpressionVisitor' 处理 LINQ 表达式 't => t .OrderByDescending(t2 => t2.InsertedDateTime) .AsQueryable() .Take(10)' 失败。这可能表示 EF Core 中的错误或限制。

还有什么想法吗?

0 投票
1 回答
2593 浏览

c# - “IMutableEntityType”不包含“Cosmos”的定义,并且没有可访问的扩展方法“Cosmos”接受第一个参数

将类库项目从 .netcore2.2 迁移到 .netcore 3.1 时,出现以下错误:

错误 CS1061“IMutableEntityType”不包含“Cosmos”的定义,并且找不到接受“IMutableEntityType”类型的第一个参数的可访问扩展方法“Cosmos”(您是否缺少 using 指令或程序集引用?)

.netcore2.2项目中,我使用了以下 nuget 包:

  1. AutoMapper.Extensions.Microsoft.DependencyInjection
  2. Microsoft.EntityFrameworkCore
  3. Microsoft.EntityFrameworkCore.Cosmos
  4. Microsoft.Extensions.Configuration

现在,作为迁移过程的一部分,我已将上述所有 nuget 包更新为最新版本。

在此处输入图像描述

她去了我的 DbContext 课程:

在上面的代码中,我在方法中遇到错误: OneCollectionPerDbSet 如下行所示:

任何人都可以通过提供他们的指导来帮助我解决这个问题

0 投票
0 回答
298 浏览

sql-server - 无法在具有唯一索引“IX_AspNetUsers_RegistrarId”的对象“dbo.AspNetUsers”中插入重复的键行

我在 Visual Studio 2019 上使用 EF-Core 3.1 在 ASP.NET-Core 3.1 应用程序中扩展了 IdentityUser,并且我定义了以下字段

这是所有需要进一步关系的实体的 fluentApi

但我意识到在将第一条记录插入数据库表后,我在将更多记录插入同一个表时遇到问题,我得到的错误如下

无法在具有唯一索引“IX_AspNetUsers_RegistrarId”的对象“dbo.AspNetUsers”中插入重复的键行。重复键值为 (d75c86d4-32d8-4b34-8269-b31e3fd35d58)。该语句已终止。

在检查我的用户表的设计视图时,我看到了以下内容

因此,在列上给出了一个唯一的约束,RegistrarId但我找不到我在哪里添加了该条件/约束或在哪里/如何正确删除它。因此,我无法继续向数据库表中添加更多记录。

如果你能指导我如何纠正这个问题,请帮助我

谢谢

0 投票
2 回答
8724 浏览

c# - 带有 NetTopologySuite.Geometries.Point 的 Entity Framework Core 3.1:SqlException:提供的值不是数据类型地理的有效实例

我有一个看起来像这样的模型:

添加点的测试代码:

我正在使用以下 NuGet,版本3.1.0

我在保存时遇到的异常如下:

SqlException:传入的表格数据流 (TDS) 远程过程调用 (RPC) 协议流不正确。参数 7 ("@p6"):提供的值不是数据类型 geography 的有效实例。检查源数据中的无效值。无效值的一个示例是小数位数大于精度的数值类型数据。

根据所有文档,经度应该是 X,纬度应该是 Y,所以我认为这不是问题。我试图颠倒坐标以防万一,但我遇到了与您在我尝试过的示例中看到的相同的错误。

https://docs.microsoft.com/en-us/ef/core/modeling/spatial

纬度 = Y 经度 = X

https://gis.stackexchange.com/a/68856/71364

我找不到任何明显的错误。设置了 Optionsbuilder,该表是使用与Entity Framework 6geography非常配合的数据类型创建的。DbGeography

Point我在 SQL Server 的文档中可以看到,没有任何特定情况需要处理。

https://docs.microsoft.com/en-us/ef/core/modeling/spatial#sql-server

我保存的坐标来自谷歌地图,因此EPSG 3857被使用。

https://gis.stackexchange.com/questions/48949/epsg-3857-or-4326-for-googlemaps-openstreetmap-and-leaflet

我错过了什么?

0 投票
2 回答
904 浏览

c# - 具有 int 转换的 Npgsql 枚举数组在“包含”上抛出 InvalidCastException

由于缺少枚举更改功能,我在 npgsql 中使用枚举到 int 的枚举数组转换。

模型:

语境:

当我在没有“接触”LINQ 表达式中的数组属性的情况下从/向 DB 读取或写入实体时,一切正常 - Postgres 中的列是 integer[] 类型,并且映射正常工作。

但是,当我在 enum[] 属性上使用“包含”函数时,它会抛出 InvalidCastException:“无法使用处理程序类型 Int32Handler 编写 CLR 类型 Proj.TestEnum”。

例子:

有什么我想念的吗?

0 投票
0 回答
1306 浏览

c# - 如何在 ASP.NET Core 上实现每个租户的数据库策略

如果每个租户都有自己的数据库,那么这里的问题是如何动态决定需要注入哪个连接字符串以及如何使连接字符串可用。

我找到了一篇关于“在 ASP.NET Core 上实现每个租户策略的数据库”的文章,这清楚地解释了一切。 https://gunnarpeipman.com/aspnet-core-database-per-tenant/

首先定义新的租户类

我们需要一个单独的 MasterDb 来存储租户配置。这意味着它需要单独的 DbContext 来表示与 MasterDb 的会话。

现在是时候引入 ITenantProvider 并编写一个使用 MasterDbContext 的实现了。该提供程序包含有关检测主机标头和获取当前租户的所有逻辑。

动态配置 OrganizationDbContext。