问题标签 [entity-framework-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 回答
3021 浏览

c# - 在 Entity Framework Core 中更新父实体时添加或更新子实体

在一个新项目中,我们使用的是 Entity Framework Core 而不是 EntityFramework 6.2.0。效果很好,但在更新父母孩子同时插入新孩子时会导致问题。

例子:

当前型号:

在 Entity Framework 中添加或更新子项的代码,在 EntityFramework 6.2.0 中运行良好

代码基于此答案:

https://stackoverflow.com/a/27177623/3850405

使用Microsoft.EntityFrameworkCore 2.2.6时会发生这种情况:

Id 0正如预期的那样,添加了一个新的兴趣。

在此处输入图像描述

但是,如果发生更新并运行以下代码:

每个新对象Id 0Id设置为-2147482197。即使没有为父对象设置任何内容,也会发生这种情况,只有一个子对象。为什么会这样?EF Core 中的上述方法是否已被替换?

在此处输入图像描述

我可以通过删除db.Entry(existingChild).CurrentValues.SetValues(childModel);和替换它来解决这个问题childModel.Name = existingChild.Name;。但如果对象有 20 个或更多属性,我不想手动一一映射它们。

在此处输入图像描述

0 投票
1 回答
134 浏览

c# - 如何使用特定的关键条件实体框架核心 3.1 检查(从日期 + 时间 - 到日期 + 时间)

当用户创建会议时,我需要检查这个房间是否在两个日期时间From DateTimeTo DateTime)之间保留,如果它被保留返回到同一页面并显示消息。

当用户尝试创建会议时,我尝试在特定位置检查两个时段(从日期时间 - 到日期时间)之间的数据时间,系统检查(从日期时间 - 到日期时间)之间的数据时间,如果这些时段之间有任何日期时间,系统将发送消息到用户,告诉用户您无法创建会议,感觉该地方存在会议,但我被困了两天。

我尝试在下面应用这些解决方案,但是,它适用于某些情况,而其他情况则让我失败:

我应用的第一个解决方案:

我应用的第二种解决方案:

我应用的第三个解决方案:

但是所有这些解决方案在测试时都会失败。

问题是:

如果数据库表中存在与否,如何使用特定键(位置、保留等)检查两个日期+时间(从日期时间到日期时间) ?

0 投票
3 回答
1168 浏览

c# - Entity Framework Core:无法在生产服务器上运行迁移脚本,聚集索引的最大键长度为 900 字节

我正在尝试将我的 ASP.NET Core 网站部署在由 Plesk 托管的生产服务器上。我的解决方案中有 2 个项目:1 个包含 my DbContext,1 个包含我的 web 项目。

我为我生成了迁移DbContext

然后我生成了文档中提到的生产迁移脚本(https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet#dotnet-ef-migrations-script

然后,我导航到生产服务器 (MyLittleAdmin) 上的 SQL 实用程序,并将生成的 SQL 脚本粘贴到其中。这成功,但我收到以下错误:

警告!聚集索引的最大键长度为 900 字节。索引“PK_AspNetUserLogins”的最大长度为 1800 字节。对于较大值的某些组合,插入/更新操作将失败。

警告!聚集索引的最大键长度为 900 字节。索引“PK_AspNetUserTokens”的最大长度为 1804 字节。对于较大值的某些组合,插入/更新操作将失败。

如果忽略这个错误,我以后可能会因为“没有明显原因”(这个原因)而导致查询失败而遇到麻烦。

我的代码非常简单:

我也尝试使用 Guid(我最终想使用 Guid),但即使 int 的 MyLittleAdmin 抱怨密钥太长。我已经在 Google 上进行了检查,但这仅提供诊断文章,并没有真正提供解决方案。

现在这是迁移的 AspNetUsers 部分:

我能做些什么来解决这个问题?

编辑:

我尝试修改我的 DbContext 配置以强制 Key 仅是 Id:

这似乎确实影响了迁移:

代替:

但它仍然给出同样的错误

编辑:添加 AspNetUserLogins、AspNetUserRoles、剥离 if 的

0 投票
2 回答
2049 浏览

c# - 没有设置器的实体框架核心属性

在我的 .net core 3.1 应用程序中,我想将属性封装在某个实体中:

因此,当我想检查此类 Sample 是否已经存在时,我已经删除了所有公共设置器,因此在我的代码中某处

该行导致错误:System.InvalidOperationException: 'No suitable constructor found for entity type 'Sample'. The following constructors had parameters that could not be bound to properties of the entity type: cannot bind 'name' in 'Sample(string name)'.'.

所以我添加了代码空构造器

现在该行导致错误:System.InvalidOperationException: 'The LINQ expression 'DbSet<Sample> .Any(s => s.Name == __name_0)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.'

但是,如果我将私有集添加到Name(或公共),那么一切正常(即使没有空构造函数)。

谁能解释我为什么需要这个setter,例如Id不需要那个setter。

0 投票
2 回答
596 浏览

c# - 将项目从 dotnet core 2.0 迁移到 3.1 并在实体框架上遇到一些问题

我正在使用 DDD 构建一个项目。因此,更新/添加/删除子实体的唯一方法是通过其父实体,当我使用 dotnet core 2.0 时这不是问题,但现在我将项目迁移到 dotnet core 3.1 我收到以下错误:

数据库操作预计会影响 1 行,但实际上会影响 0 行。自加载实体以来,数据可能已被修改或删除。有关了解和处理乐观并发异常的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=527962

我有一个这样的客户端类:

我有我的接待课:

这是客户端配置文件:

以及接收配置文件:

在我进行项目迁移之前,这一直很有效,如果我必须更改某些配置,我不知道发生了什么。

0 投票
1 回答
34 浏览

c# - 获取多个IQueryable的一个属性值

我有四个 IQueryable:

所有 X 对象都有一个共同的属性,CodeId。例如 X1 是:

使用 Linq to Entities 如何获取 X1、X2、X3 和 X4 中的所有 CodeId?

0 投票
0 回答
147 浏览

c# - IdentityServer4.EntityFramework 3.1 和 Microsoft.EntityFrameworkCore 3.1

我正在将 IdentityServer4 升级到 3.1 版,升级后我遇到了单元测试问题。IdentityServer4.EntityFramework.Stores.ClientStore如下所示:

我的单元测试:

执行时抛出此异常FindClientByIdAsync

堆栈跟踪: EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable 1 source, Expression expression, CancellationToken cancellationToken) EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable1 源,CancellationToken cancelToken) EntityFrameworkQueryableExtensions.FirstOrDefaultAsync[TSource](IQueryable 1 source, CancellationToken cancellationToken) ClientStore.FindClientByIdAsync(String clientId) IfloClientStore.FindClientByIdAsync(String clientId) line 27 TestIfloClientStore.FindClientByIdAsync_Given_PFP_Saml2Bearer_Client_Return_PFP_SamlAllowed_Client() line 43 GenericAdapter1.GetResult() AsyncToSyncAdapter.Await(Func`1 调用) TestMethodCommand.RunTestMethod(TestExecutionContext 上下文) TestMethodCommand.Execute(TestExecutionContext context) <>c__DisplayClass1_0.b__0() BeforeAndAfterTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)

如果我降级IdentityServer4.EntityFramework到 3.0 版,它工作得很好。但我想确定 IDS4 是否有错误,或者我是否因为升级而必须更改某些内容。有人可以帮助我吗?

0 投票
6 回答
16564 浏览

c# - Entity Framework Core 3.1 存储过程的返回值(int)

这返回-1,我怎样才能从存储过程中获得实际的返回值?

这是我的存储过程

C# 代码

0 投票
2 回答
896 浏览

sql-server - 从 EF Core 2 迁移到 EF Core 3 - 日期时间毫秒精度

我有一些迁移将一些数据插入到数据库中,这就是其中之一:

将 EF Core 升级到版本 3 后,上面的代码会生成此插入:

如我们所见,日期毫秒有 6 个小数位,但如果我将 EF Core 降级到版本 2,相同的迁移会生成以下插入:

由于 SQL Server 的精度为小数点后 3 位,并且我无法将所有日期时间列更改为Datetime2,因此有人知道解决方法吗?

0 投票
0 回答
18 浏览

entity-framework-core - 删除子实体时删除父实体......如果有的话,寻找更好的方法

我有一个地址实体:

使用外键在许多实体(用户、书籍、...)中使用:

当我删除一本书时,我需要删除它的地址......

当我删除一个用户时,我也在删除它的书籍(我有删除级联),所以我需要删除用户地址和它的书籍地址。

删除用户或书籍时删除相应的地址与级联删除相反。

因此,我创建了以下查询,在删除用户或图书后运行该查询:

所以我正在删除Id用户或书籍表中不存在的地址。

它正在工作,我将它应用于超过 2 个表,因为地址用于更多。

问题

  1. 有没有更好的方法来改进我的查询?

  2. 有更好的方法吗?