问题标签 [ef-core-2.2]

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

c# - EF Core HasQueryFilter 仅适用于过滤器表达式中的第一个值

我正在使用 EF Core HasQueryFilter 扩展方法,它位于 OnModelCreating 方法中。

我正在使用服务将用户 ID 注入 DbContext,然后将用户 ID 应用于查询过滤器。第一次执行 OnModelCreating 时,它可以正常工作。但是当我更改用户并将不同的 userId 传递给 DbContext 时,查询过滤器不会受到明显影响,因为这次没有调用 OnModelCreating。

应用程序的一点背景:它是一个核心 2.2 API 项目,它使用 JWT 令牌对用户进行身份验证。我使用 JWT 填充用户声明并初始化注入的身份验证服务,因此对于 API 的每次调用,userId 都可能不同,因此查询过滤器应该适用于不同的 userId。

下面的示例代码:

如何初始化 DbContext。

0 投票
0 回答
352 浏览

c# - 使用 EF 核心 2.2 的 IGeometry 'MakeValid' 错误

我正在将 EF core 2.2 与具有 IGeometry 对象(https://docs.microsoft.com/en-us/ef/core/modeling/spatial)的项目一起使用,并且我正在针对我数据库中的一些空间数据。但是有时我会收到此错误:

执行用户定义的例程或聚合“几何”期间发生 .NET Framework 错误:System.ArgumentException:24144:此操作无法完成,因为实例无效。使用 MakeValid 将实例转换为有效实例。请注意,MakeValid 可能会导致几何实例的点稍微移动

现在,当我在不使用 EF 核心的纯 SQL 中时,我可以使用 MakeValid 来修复它,但我在 C# 中看不到类似的东西。我看到的最接近的是“IsValid”选项(https://nettopologysuite.github.io/html/class_net_topology_suite_1_1_operation_1_1_valid_1_1_is_valid_op.html

是否有我找不到的 EF Core 的 MakeValid?

0 投票
1 回答
619 浏览

c# - 从多对多 EF Core 实体在剃须刀页面中构建复选框列表

我的问题是:如何在 razor 页面和 LINQ 查询(在后端)中构建 html 标记,以在 EDIT 和 CREATE 视图中显示我的所有 SubCategoies 的复选框列表。

允许我创建具有多个子类别的产品并随时在 EDIT 视图中更新它们。

使用 .Net EF Core 2.2,Razor 页面。

主类(产品):

Product 与 Subcategory 具有多对多关系:

所以连接表(实体)是ProductSubcategory:

编辑(和创建)产品视图:

Edit.cshtml.cs 页面模型

0 投票
1 回答
3181 浏览

c# - 在数据库中更新时未保存嵌套的拥有类型

我有以下课程:

命令:

预付款:

钱:

然后我通过以下方式将 Order 类映射到数据库:

SaveChanges 的存储库代码:

请理解,我从代码中删除了所有不重要的属性,以使示例更清晰。

上面的代码适用于INSERT预付款 -> 货币 -> 金额正确保存到数据库中的场景。UPDATE虽然似乎没有反映在数据库中。

请注意,我在该模型中有很多 Owned Types,并且它们都运行良好。据我所知,唯一的区别是Prepaymentproperty 有另一个嵌套的 Owned 类型 - Money

Order传递到存储库的类对象,首先从数据库中提取,然后在该实例上应用更改,最后保存回数据库。Customer示例中未提及的其他属性也是 aOwnedType并且UPDATE按预期工作。

以防万一 - 用于在更新之前检索对象的代码:

我正在使用的 Entity Framework Core 的确切版本是:2.2.0

任何帮助将不胜感激。谢谢你。

编辑:

更新数据的代码如下所示:

以及设置预付款的 ApplyChanges 方法的一部分:

0 投票
2 回答
1775 浏览

c# - 按点链接 lambda 表达式

我有两个表达式,我想将它们链接起来,以便生成的表达式包含两个输入表达式。

现在expression3只包含x => x.Include(m => m.MaterialSomething)所以它覆盖了第二个表达式。我希望它是x => x.Include(m => m.MaterialGroup).Include(m => m.MaterialSomething)

我打算实现的是以编程方式加入多个包含表达式,以便能够为 EF Core 中的即时加载构建更高效的系统。

编辑:这不是 ANDing、ORing 等问题,因为我希望将这些表达式链接起来(如点链接),而不是逻辑连接。

丹尼尔

0 投票
1 回答
740 浏览

.net-core - EF Core 中的多个请求而不是一个

我有这个选择,我希望通过向 SQL Server 发送一个命令来执行它,但我可以看到 10 秒的请求。我该如何解决?

我们有拥有客户和订单的公司。由于某些原因,订单属于公司实体。

0 投票
1 回答
197 浏览

.net-core - 在 .NET Core 2.x 中查询多对多相关数据

这些是示例实体:

这是它们在 ApplicationDbContext 中的配置方式:

现在我想采取:

  • 通过给定的 ID

但:

  • 这个人必须很酷(IsCool = true)
  • 此人必须来自至少一个不受欢迎的社区(IsPopular = false)

在所有其他情况下,查询应该返回 null,即使具有给定 ID 的人存在于数据库中。所以查询只是ctx.People.FirstOrDefault(p => p.Id == id)不在表中。

我想以最优化和最有效的方式实现它,尤其是不将任何不必要的数据加载到程序的内存中。

提示:最初,我必须通过某些标志查询分配到超过 10k 个组的超过 200 万用户,这些组具有多对多关系。而且我不能只使用 SQL。它必须是 EF Core。

我发现很多类似的问题可以部分解决这个问题,或者不满足效率要求,这在这里很关键。

0 投票
0 回答
625 浏览

c# - 由于可空类型更改为枚举,迁移后 EF 核心更新失败

我正在使用 EF core 2.2.1,当我更新到最新迁移时遇到以下错误:

System.Data.SqlClient.SqlException(0x80131904):无法将值 NULL 插入列“CountryCode”、表“context.dbo.User”;列不允许空值。更新失败。该语句已终止。

该消息很清楚,并且由于实体的更改,在迁移之前它是:

然后 CountryCode 的类型更改为枚举 (CountryCode)

即使我尝试为枚举设置默认值,实体配置也没有改变(仍然与上面相同的错误):

已添加迁移,但相关更新在包管理器控制台中使用此命令失败

dotnet ef 数据库更新

问题是如何正确更改此类型,在生成的表中具有默认值的不可为空的列(在 EF 核心 EntityTypeConfiguration 中配置的列)

0 投票
1 回答
37 浏览

ef-core-2.2 - 使用 EF 核心复制具有关系的多个表数据

我有七个表,其中包含数百行相关数据。这些表格构建了一个相当复杂的报价工具,增加了材料和成本等。

是否可以使用 EF Core 和几行代码来加载所有这些实体,然后将它们写回新实体,但会在途中生成新 ID 并正确地将所有内容相互关联,因此我最终得到了所有的数据。然后,我可以更改 Header 表上的 CompanyID,瞧,一家公司拥有完整的模板副本,他们现在可以自行配置。

我将要编写一个程序来逐个加载实体,循环它们,逐个保存行等,存储id,等等等等。我很高兴编写该程序,因为我看不到自动执行此操作的方法。

0 投票
2 回答
1048 浏览

c# - Entity Framework Core 2.2 编译的查询结构参数在本地评估

我一直在研究使用 Entity Framework Core 编译的查询。我正在使用当前最新的稳定版本 2.2.2。我正在阅读这篇文章(https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/language-reference/compiled-queries-linq-to-entities)以了解编译查询,并试图了解这是 EF Core 中的错误还是他们尚未完成的事情。我认识到这篇文章是为 EF6 编写的,但期望编译的查询会以相同的方式工作,并且找不到任何相反的东西。

这是我的 DbContext 设置和一个简单的分页选项结构:

这是我编译的查询。第一个选择基于结构参数的用户“页面”(非常类似于文章中的示例)。第二个做同样的事情,但接受“skip”和“take”作为基本 int32 类型的单独参数。

这是演示问题的用法:

goodQuery运行时,一切都按预期工作。以下内容在日志中显示为我期望的生成 SQL:

但是,当badQuery运行时,它会选择所有记录,然后评估内存中的 Skip 和 Take,这将导致糟糕的性能。

由于几个非常重要的原因,我更喜欢使用复杂类型(引用或值结构,不关心)作为编译查询的参数:

  1. Lambda 函数具有最大数量的输入参数。如果我有一个需要多个输入的复杂过滤、排序和分组查询,我将被迫走其他路线。
  2. 对于调用查询的开发人员来说,输入参数更加清晰。即使在这个例子中,调用查询的开发人员也会开始输入 query.Invoke,然后在智能感知中盯着 2 个未命名的整数参数。他们知道他们的意思的唯一方法是查看查询。如果输入参数更改了顺序或含义,那么对查询的更改将非常危险。

EF Core 3.0 路线图(https://docs.microsoft.com/en-us/ef/core/what-is-new/roadmap)确实表示他们正在研究他们的 LINQ 查询策略(以避免这种可怕的运行查询,或者至少让您在运行前知道或碰巧在您的日志中捕获警告),但我希望 struct 参数能够工作。

如果我做错了什么或者这是正在进行中的事情,有人在这里有任何见解吗?你会认为这也是一个错误吗?