问题标签 [ef-core-5.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.

0 投票
1 回答
305 浏览

mysql - Microsoft.EntityFrameworkCore 5.0.2 与 uap10.0.17134 不兼容(UAP,Version=v10.0.17134)

在 WinUI 桌面应用程序中添加 EF Core nuget 包时出现以下错误。

我正在尝试使用 EF Core 从 WinUI 应用程序访问 mysql。

我的命令行中的 dotnet 版本是

5.0.200-preview.20601.7

0 投票
1 回答
163 浏览

c# - (嵌套)拥有类型的 EF Core 域范围值转换

我在 EF Core 中设置了几个值对象(DDD 范式)作为拥有的类型。

EF Core 支持以一种方式配置拥有类型,它会通过该Owned()方法自动将对给定类型的所有引用视为拥有类型。

但是,我似乎找不到一种方法来以类似的集中方式指定它们的配置,尤其是值转换。

如上所见,为 配置了一个值转换MassUnit,它是一个嵌套在 中的值对象Mass

但是对于所有使用值对象的地方,我必须手动执行此操作。例如,我已经Money在 3 个不同的地方使用该类型,并且该类型包含Currency,我希望为其配置类似的值转换。

是否有任何(好的)方法来为拥有的类型指定一般的、域范围的配置?

我已经尝试builder.Entity<Mass>().Property(m => m.Unit).HasConversion(..)通过Entity<>.

0 投票
0 回答
162 浏览

asp.net - EF Core 5 删除 HiLo 序列

我最近将我的一个 asp net core 项目迁移到 .net5。在我的项目中,我使用了 EF,迁移后我升级到了 EF core 5。我在 PK 中使用 HiLo,就在昨天,我添加了一个新列,当生成迁移时,我注意到 EF 删除了我所有相关的序列到 HiLo PK。

这是 EF Core 5 上的新行为吗?这是一个错误吗?我应该做些什么来防止这种情况发生吗?

编辑

这是生成的迁移之一,drop 被评论:

这是我的实体配置:

最后,这是“ConfigBaseEntity”的代码

不确定这是否足以让你们了解我在说什么。如您所见,EF 添加了这两列,但同时生成了删除所有 HiLo 序列的代码。我的其余配置看起来与我在此处发布的配置非常相似。

提前非常感谢。

0 投票
1 回答
1016 浏览

c# - Entity Framework Core 在一对多关系中添加具有所需导航属性的新实体?

语境

我正在做一个有Brands 和OemModels 的项目。它们之间是一对多的关系。ABrand可以有任意数量的OemModels,但一个OemModel只能有 1 个品牌。出于商业原因,OemModels 需要知道Brand它们属于什么。

该项目使用 Entity Framework Core 5.0 构建,并使用 Npgsql 5.0.1 包连接到 PostgreSQL 数据库。我正在使用代码优先的方法来生成数据库。

该项目还使用了可选的Nullable Reference Types功能。[Required]这意味着根据MSDN 文档,任何指向引用类型的导航属性本质上都是:

如果启用可为空的引用类型,则将根据其 .NET 类型的 C# 可空性配置属性:string?将配置为可选,但string将根据需要进行配置。

这是我的数据库上下文类:

这是我的模型类:

我正在使用“null!” 根据MSDN 文档, null 宽恕运算符

作为一种更简洁的替代方案,可以在 null-forgiving 运算符 (!) 的帮助下简单地将属性初始化为 null:

public Product Product { get; set; } = null!;

实际的空值永远不会被观察到,除非是由于编程错误,例如在没有事先正确加载相关实体的情况下访问导航属性。

我的问题

我目前在集成测试中向现有品牌添加模型时遇到问题。

假设以下代码已经成功运行:

我无法为这些新创建的品牌添加模型:

注意:上面两个代码块是同一个方法,它们之间没有任何代码。

上面的代码块失败并显示以下错误消息:

内部异常:

我还尝试在模型中明确定义BrandandBrandId属性(我认为这是有道理的,因为它们本质上[Required]是在 NRT 设置之前)。例如:

但它仍然失败并出现同样的错误。

我觉得这很令人困惑,因为我的数据库迁移会为我的模型表生成以下内容:

和:

OemModel表没有“PK_Brands”,但是当我尝试保存将OemModels 添加到现有品牌时所做的更改时会引发异常。

在调试器中,我的两个s 在添加到上下文后Brand都具有唯一Id的 s(正如我所期望的那样),因此在将OemModels 添加到其内部列表时它们都是唯一的。我的理解是,Id如果我将模型添加到现有品牌并保存更改,模型应该会自动生成它们,不是吗?

如果主体是属性,我对将OemModels 添加到现有s的正确方法是什么感到困惑。根据我的理解,分配应该允许我在直接将其添加到s 列表时创建s 而无需为其父级指定导航属性,但无论它们是否已定义或不是。BrandBrand[Required]null!;OemModelBrandBrandOemModel

0 投票
1 回答
268 浏览

c# - EF Core 5 在迁移中创建了两次表

我已经创建了一个项目和一个迁移,但似乎迁移在添加新迁移时并不关心以前的迁移,也就是说,迁移文件只是尝试创建两次相同的表。

我创建了两个迁移,First并且Second. 改变的是我向Post实体添加了一个字符串属性(此处未显示)。我的预期是这样的:

但相反,我得到了一个Second包含迁移中所有内容的First迁移,但是在创建 table 时Post,它​​有添加的列。几乎就像它甚至不在乎有一次First迁移,因此就像它有史以来的第一次迁移一样。

第一的

第二

如您所见,它们是相同的,为什么会发生这种情况?

0 投票
1 回答
224 浏览

asp.net - EF core 5 Update entity with Many to many(无法跟踪实体类型的实例)

Ad我和Category类之间有多对多的关系。

我有要更新的广告详细信息页面Ad

在 UI 中,类别被实现为具有多个值的 Select2。

当我更新 ad时,我收到错误,类别的实例已经被跟踪。(实体类型的实例无法被跟踪,因为另一个具有相同键值的实例 {'Id'} 已经被跟踪)

这是我检索广告以显示在详细信息页面上的代码,以及更新广告的代码。

这似乎是很常见的情况。我有详细信息页面,在某些选择框中我必须选择多个值。

这是我的用户界面代码(Blazor)

0 投票
2 回答
458 浏览

c# - 实体框架在外键条件下产生左连接

我有 2 个模型:

我想用这个查询来检索某个用户的所有问卷:

它可以工作,但实体框架会产生这个 sql 查询:

在我看来,左连接是不必要的。请问有什么解决方法可以避免这种左连接吗?先感谢您。

0 投票
1 回答
909 浏览

c# - EF Core 5.0 添加多对多使得一对多无法确定

我想利用 ef core 5.0 中新的多对多功能。https://docs.microsoft.com/en-us/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-simple-key%2Csimple-key

我现有的课程是

我想在它们之间添加一个多对多的关系,所以这些类是

现在dotnet ef migrations add NotificationRecipients结果Unable to determine the relationship represented by navigation 'Notification.Recipients' of type 'ICollection<User>'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.

经过一番研究,我找到了[InverseProperty()]注释,所以我将它添加到 Notification.cs

多对多现在似乎已解决,但dotnet ef migrations add NotificationRecipients结果是Unable to determine the relationship represented by navigation 'Notification.Creator' of type 'User'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.

有没有我可以添加的注释Notification.Creator和或任何其他方式来定义和Notification.Updater之间的一对多关系?UserNotification

我正在使用 MSSQL 作为数据库。

0 投票
2 回答
390 浏览

c# - Linq2DB (SQL Server):链接 Sql.Property动态调用

我使用此Pull Request中的示例作为嵌套属性链的参考。不幸的是,像

不起作用。

假设我有一个模型SortDescriptor(定义如下),它定义了我们如何动态地对代码中的项目进行排序。有没有办法动态创建表达式树来生成嵌套Sql.Property调用,如下ToPropertyExpression所示的方法?

SortBy如果给定以下过滤器,则应从函数输出以下 SQL :

Category是一个导航属性CategoryProperty

以下是我正在使用的函数和对象:

每当我尝试执行与上述类似的操作时,我都会收到此错误消息,指出它正在尝试Sql.Property在客户端评估表达式链:

异常消息:
LinqToDB.Linq.LinqException:'Property' 只是服务器端方法。

堆栈跟踪:在 LinqToDB.Linq.QueryRunner.SetParameters(Query query, Expression expression, IDataContext parametersContext, Object[] parameters, Int32 queryNumber, SqlParameterValues parameterValues) 在
LinqToDB.Linq.Sql.Property[T](Object entity, String propertyName) .Linq.QueryRunnerBase.SetCommand(Boolean clearQueryHints) 在 LinqToDB.Data.DataConnection.QueryRunner.<>n__0(Boolean clearQueryHints) 在 LinqToDB.Data.DataConnection.QueryRunner.ExecuteReaderAsync(CancellationToken cancelToken) 在 LinqToDB.Linq.QueryRunner.AsyncEnumeratorImpl 1 来源, CancellationToken cancelToken) 在 Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable




1.MoveNextAsync() at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable
1 source, CancellationToken cancellationToken) at LinqToDB.AsyncExtensions.ToListAsync[TSource](IQueryable1 来源,CancellationToken 令牌)
在 D:\Dev\repos\Experlogix.Api.DesignStudio\src\Experlogix.Api.DesignStudio.DataAccess\CategoryPropertyRepository 中的 Experlogix.Api.DesignStudio.DataAccess.CategoryPropertyRepository.GetPageIndexById(CategoryPropertyFilter filter, Guid id) .cs:line 116
at Experlogix.Core.DataAccess.Service 6.GetPageIndexById(TFilter filter, TId id) at Experlogix.Api.DesignStudio.Controllers.CategoryPropertyController.GetPageIndexAsync(Guid id, CategoryPropertyFilter filter) in D:\Dev\repos\Experlogix.Api.DesignStudio\src\Experlogix.Api.DesignStudio\Controllers\CategoryPropertyController.cs:line 46 at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask1 actionResultValueTask)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed 上下文)
在 Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
在 Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker 调用程序, Task lastTask, State next, Scope
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|19_0(ResourceInvoker 调用程序,Task lastTask,State next,Scope 范围,对象状态,Boolean isCompleted)在
Microsoft.AspNetCore.Mvc.Infrastructure。 ResourceInvoker.g__Awaited|17_0(ResourceInvoker 调用程序,任务任务,IDisposable 范围)
在 Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(端点端点,任务 requestTask,ILogger 记录器)
在 D:\Dev\repos\Experlogix.Api.DesignStudio\src\Experlogix.Api.DesignStudio\Middleware\DatabaseConnectionMiddleware 中的 Experlogix.Api.DesignStudio.Middleware.DatabaseConnectionMiddleware.Invoke(HttpContext httpContext, IUserContext userContext, IConnectionContext connectionContext, IDatabaseClient databaseClient) .cs: 第 65 行
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
在 Serilog.AspNetCore.RequestLoggingMiddleware.Invoke(HttpContext httpContext)
在 Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
在 Swashbuckle.AspNetCore。 Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
在 Experlogix.Core.AspNet.Middleware.ApiExceptionHandlerMiddleware.Invoke(HttpContext 上下文)

任何关于如何实现与此类似的事情的指导将不胜感激!

环境细节

  • linq2db 版本:linq2db.EntityFrameworkCore 5.1.0
  • 数据库服务器:SQL Server
  • 操作系统:Windows 10
  • .NET 框架:.Net 5.0
0 投票
1 回答
32 浏览

asp.net-core - Entity Framework Core 通过导航名称预先加载(字符串)

我有 2 个实体类,如下所示:

我知道我可以通过以下方式包含 City:

并包括 City with Province:

我的问题是,有没有办法使用字符串参数来包含省?像Include("City.Province")或之类的东西ThenInclude("Province")