问题标签 [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.
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 0
都Id
设置为-2147482197
。即使没有为父对象设置任何内容,也会发生这种情况,只有一个子对象。为什么会这样?EF Core 中的上述方法是否已被替换?
我可以通过删除db.Entry(existingChild).CurrentValues.SetValues(childModel);
和替换它来解决这个问题childModel.Name = existingChild.Name;
。但如果对象有 20 个或更多属性,我不想手动一一映射它们。
c# - 如何使用特定的关键条件实体框架核心 3.1 检查(从日期 + 时间 - 到日期 + 时间)
当用户创建会议时,我需要检查这个房间是否在两个日期时间(From DateTime,To DateTime)之间保留,如果它被保留返回到同一页面并显示消息。
当用户尝试创建会议时,我尝试在特定位置检查两个时段(从日期时间 - 到日期时间)之间的数据时间,系统检查(从日期时间 - 到日期时间)之间的数据时间,如果这些时段之间有任何日期时间,系统将发送消息到用户,告诉用户您无法创建会议,感觉该地方存在会议,但我被困了两天。
我尝试在下面应用这些解决方案,但是,它适用于某些情况,而其他情况则让我失败:
我应用的第一个解决方案:
我应用的第二种解决方案:
我应用的第三个解决方案:
但是所有这些解决方案在测试时都会失败。
问题是:
如果数据库表中存在与否,如何使用特定键(位置、保留等)检查两个日期+时间(从日期时间到日期时间) ?
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 的
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。
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。
我有一个这样的客户端类:
我有我的接待课:
这是客户端配置文件:
以及接收配置文件:
在我进行项目迁移之前,这一直很有效,如果我必须更改某些配置,我不知道发生了什么。
c# - 获取多个IQueryable的一个属性值
我有四个 IQueryable:
所有 X 对象都有一个共同的属性,CodeId
。例如 X1 是:
使用 Linq to Entities 如何获取 X1、X2、X3 和 X4 中的所有 CodeId?
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, IQueryable
1 源,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
GenericAdapter
1.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 是否有错误,或者我是否因为升级而必须更改某些内容。有人可以帮助我吗?
c# - Entity Framework Core 3.1 存储过程的返回值(int)
这返回-1,我怎样才能从存储过程中获得实际的返回值?
这是我的存储过程
C# 代码
sql-server - 从 EF Core 2 迁移到 EF Core 3 - 日期时间毫秒精度
我有一些迁移将一些数据插入到数据库中,这就是其中之一:
将 EF Core 升级到版本 3 后,上面的代码会生成此插入:
如我们所见,日期毫秒有 6 个小数位,但如果我将 EF Core 降级到版本 2,相同的迁移会生成以下插入:
由于 SQL Server 的精度为小数点后 3 位,并且我无法将所有日期时间列更改为Datetime2
,因此有人知道解决方法吗?
entity-framework-core - 删除子实体时删除父实体......如果有的话,寻找更好的方法
我有一个地址实体:
使用外键在许多实体(用户、书籍、...)中使用:
当我删除一本书时,我需要删除它的地址......
当我删除一个用户时,我也在删除它的书籍(我有删除级联),所以我需要删除用户地址和它的书籍地址。
删除用户或书籍时删除相应的地址与级联删除相反。
因此,我创建了以下查询,在删除用户或图书后运行该查询:
所以我正在删除Id
用户或书籍表中不存在的地址。
它正在工作,我将它应用于超过 2 个表,因为地址用于更多。
问题
有没有更好的方法来改进我的查询?
有更好的方法吗?