问题标签 [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.
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
c# - (嵌套)拥有类型的 EF Core 域范围值转换
我在 EF Core 中设置了几个值对象(DDD 范式)作为拥有的类型。
EF Core 支持以一种方式配置拥有类型,它会通过该Owned()
方法自动将对给定类型的所有引用视为拥有类型。
但是,我似乎找不到一种方法来以类似的集中方式指定它们的配置,尤其是值转换。
如上所见,为 配置了一个值转换MassUnit
,它是一个嵌套在 中的值对象Mass
。
但是对于所有使用值对象的地方,我必须手动执行此操作。例如,我已经Money
在 3 个不同的地方使用该类型,并且该类型包含Currency
,我希望为其配置类似的值转换。
是否有任何(好的)方法来为拥有的类型指定一般的、域范围的配置?
我已经尝试builder.Entity<Mass>().Property(m => m.Unit).HasConversion(..)
通过Entity<>
.
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 序列的代码。我的其余配置看起来与我在此处发布的配置非常相似。
提前非常感谢。
c# - Entity Framework Core 在一对多关系中添加具有所需导航属性的新实体?
语境
我正在做一个有Brand
s 和OemModel
s 的项目。它们之间是一对多的关系。ABrand
可以有任意数量的OemModel
s,但一个OemModel
只能有 1 个品牌。出于商业原因,OemModel
s 需要知道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!;
实际的空值永远不会被观察到,除非是由于编程错误,例如在没有事先正确加载相关实体的情况下访问导航属性。
我的问题
我目前在集成测试中向现有品牌添加模型时遇到问题。
假设以下代码已经成功运行:
我无法为这些新创建的品牌添加模型:
注意:上面两个代码块是同一个方法,它们之间没有任何代码。
上面的代码块失败并显示以下错误消息:
内部异常:
我还尝试在模型中明确定义Brand
andBrandId
属性(我认为这是有道理的,因为它们本质上[Required]
是在 NRT 设置之前)。例如:
但它仍然失败并出现同样的错误。
我觉得这很令人困惑,因为我的数据库迁移会为我的模型表生成以下内容:
和:
该OemModel
表没有“PK_Brands”,但是当我尝试保存将OemModel
s 添加到现有品牌时所做的更改时会引发异常。
在调试器中,我的两个s 在添加到上下文后Brand
都具有唯一Id
的 s(正如我所期望的那样),因此在将OemModel
s 添加到其内部列表时它们都是唯一的。我的理解是,Id
如果我将模型添加到现有品牌并保存更改,模型应该会自动生成它们,不是吗?
如果主体是属性,我对将OemModel
s 添加到现有s的正确方法是什么感到困惑。根据我的理解,分配应该允许我在直接将其添加到s 列表时创建s 而无需为其父级指定导航属性,但无论它们是否已定义或不是。Brand
Brand
[Required]
null!;
OemModel
Brand
Brand
OemModel
c# - EF Core 5 在迁移中创建了两次表
我已经创建了一个项目和一个迁移,但似乎迁移在添加新迁移时并不关心以前的迁移,也就是说,迁移文件只是尝试创建两次相同的表。
我创建了两个迁移,First
并且Second
. 改变的是我向Post
实体添加了一个字符串属性(此处未显示)。我的预期是这样的:
但相反,我得到了一个Second
包含迁移中所有内容的First
迁移,但是在创建 table 时Post
,它有添加的列。几乎就像它甚至不在乎有一次First
迁移,因此就像它有史以来的第一次迁移一样。
第一的
第二
如您所见,它们是相同的,为什么会发生这种情况?
asp.net - EF core 5 Update entity with Many to many(无法跟踪实体类型的实例)
Ad
我和Category
类之间有多对多的关系。
我有要更新的广告详细信息页面Ad
。
在 UI 中,类别被实现为具有多个值的 Select2。
当我更新 ad
时,我收到错误,类别的实例已经被跟踪。(实体类型的实例无法被跟踪,因为另一个具有相同键值的实例 {'Id'} 已经被跟踪)
这是我检索广告以显示在详细信息页面上的代码,以及更新广告的代码。
这似乎是很常见的情况。我有详细信息页面,在某些选择框中我必须选择多个值。
这是我的用户界面代码(Blazor)
c# - 实体框架在外键条件下产生左连接
我有 2 个模型:
和
我想用这个查询来检索某个用户的所有问卷:
它可以工作,但实体框架会产生这个 sql 查询:
在我看来,左连接是不必要的。请问有什么解决方法可以避免这种左连接吗?先感谢您。
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
之间的一对多关系?User
Notification
我正在使用 MSSQL 作为数据库。
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](IQueryable1.MoveNextAsync() at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable
1 source, CancellationToken cancellationToken) at LinqToDB.AsyncExtensions.ToListAsync[TSource](IQueryable
1 来源,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.Service6.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, ValueTask
1 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
asp.net-core - Entity Framework Core 通过导航名称预先加载(字符串)
我有 2 个实体类,如下所示:
我知道我可以通过以下方式包含 City:
并包括 City with Province:
我的问题是,有没有办法使用字符串参数来包含省?像Include("City.Province")
或之类的东西ThenInclude("Province")
。