问题标签 [ef-core-3.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.
c# - 抑制 EF core 3.0.x 初始化消息
我有:
每当我访问我的 DBContext 时,控制台都会显示
信息:Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 3.0.0-preview4.19176.6 已初始化
有没有办法过滤掉这个特定的消息?当我做很多查询时,它只会弄乱我的控制台调试窗口..
c# - 如何修复 Entity Framework Core 错误“值不能为空。参数名称:frameworkName”?
使用 EF Core (3.0.0-preview6.19304.10) 的预发布版本。当我打电话时DbContext.SaveChanges()
,它会导致错误
值不能为空。参数名称 frameworkName
这是上下文类
型号配置:
和实体:
这是错误堆栈跟踪
在 Microsoft.EntityFrameworkCore.Metadata.Internal.ClrAccessorFactory'1.Create(PropertyInfo propertyInfo, IPropertyBase propertyBase)
在 Microsoft.EntityFrameworkCore.Internal.NonCapturingLazyInitializer.EnsureInitialized[TParam,TValue](TValue&target, TParam param, Func'2 valueFactory)
在 Microsoft。 EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.WritePropertyValue(IPropertyBase propertyBase, Object value)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetProperty(IPropertyBase propertyBase, Object value, Boolean setModified, Boolean isCascadeDelete, CurrentValueType valueType)
在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.AcceptChanges( ) 在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager 的 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetProperty(IPropertyBase propertyBase, Object value, Boolean setModified, Boolean isCascadeDelete)
。 AcceptAllChanges(IReadOnlyList'1 changedEntries)
在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)在 Microsoft.EntityFrameworkCore.DbContext.SaveChanges(布尔型 acceptAllChangesOnSuccess)
在 C:\Projects\EFImplementationRepo\EFPersistance\Repositories\EFBaseRepository.cs:line 154 中的 EFPersistence.Repositories.EFBaseRepository'4.SaveChanges()
在 C:\Projects\EFImplementationRepo\EFImplementationRepo\Program.cs:line 31 中的 EFImplementationRepo.Program.SeedData(EFBaseRepository'4 baseRepository)
在 C:\Projects\EFImplementationRepo\EFImplementationRepo\Program.cs:line 16 中的 EFImplementationRepo.Program.Main()
c# - 在 .NET Core 3 下的 EF 中,我是否仍需要一个显式的 N 对 N 中间实体?
我读过几篇类似这样的文章,其中暗示 A 和 B 之间需要一个显式实体 AB。
当我用谷歌搜索时,我找不到任何官方信息证实或反驳该声明。另一方面,预览版的文档可能没有完全覆盖。
在 .NET Core 3 中是否有可能,还是我们仍然被迫手动创建 N 对 N 实体?
c# - EF Core - FirstOrDefaultAsync 抛出空引用异常
我正在尝试使用 XUnit 测试 ASP.NET Core Web API 控制器。我直接在控制器中使用 DBContext。在生产中,我使用的是 SqlServer,而对于测试,我使用的是 InMemory 提供程序。当我测试一些使用 EF CoreFirstOrDefaultAsync
方法的代码时,应用程序抛出空引用异常。我正在寻找的值在数据库中不存在。根据我的理解,它应该返回 NULL,它不应该抛出异常。
我尝试了类似的东西where(x => x.Id = id).FirstOrDefaultAsync()
,它也抛出了相同的空引用异常。
当我尝试类似
有用。dbcontext 和 users 属性都有值,它们不为空。
请帮忙。
c# - EF Core 3.0 中的自有类型映射问题
我已经从 EF Core Preview5 迁移到 Preview7,现在我通过 select 具有相同的内部复杂属性映射。
例如:
早些时候,代码modelBuilder.Entity<Car>().OwnsOne(e => e.Volume)
工作正常,但现在它需要使用WithOwner
但我无法理解(见这里:https ://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core -3.0/break-changes ) 我不能使用这样的代码:modelBuilder.Entity<Car>().OwnsOne(e => e.Volume).WithOwner("Car")
或modelBuilder.Entity<Car>().OwnsOne(e => e.Volume).WithOwner(f => f.Car)
. 有没有人有同样的问题?
谢谢。
更新。
我检查了 OrderStoreDbContextModelSnapshot.cs。我在这里发布了与上面的示例完全一致的其他示例。
在哪里
因此,正如我们所见,ContextSnapshot 正确地映射了数据(在这种情况下,ComplexType 属性实际上没有任何作用,实验性地)。
OrderStoreDbContext
有财产public DbSet<OrderProfile> OrderProfiles { get; set; }
。
但是 linq 请求var orderProfiles = await orderDbContext.OrderProfiles.ToListAsync();
仅映射简单类型(存在于 OrderProfiles 表中,但并不复杂。
代码var orderProfiles = await orderDbContext.OrderProfiles.Include(p => p.Volume).ToListAsync();
也没有效果 - 我得到orderProfiles.Volume
andorderProfiles.StartPoint
和. orderProfiles.EndPoint
null
但是,在 Preview5 中,此代码运行良好。微软开发人员是否破坏了 EF Core 3.0 Preview7 中的复杂类型映射或我弯曲的双手中的问题?
更新 2. 在 github 项目 repo 上发布了一个问题。
c# - Entity Framework Core 3 Preview 7 - 包括 Where 中使用的属性所必需的
以前这会起作用:
现在我需要为“用户”对象包含“包含”
那正确吗?这改变了Entity Framework Core 3 Preview 7
吗?
如果我不包括它,我会得到一个不友好的例外。
c# - 在 EF Core 3 下未实现“get_Info”的延迟加载崩溃
我按照文档告诉我,从 2.1 版开始,我可以执行以下操作。
抛出下面的异常不起作用。注释掉该UseLazyLoadingProxies
部分使其正常运行,这应该归咎于懒惰)。
System.TypeLoadException HResult=0x80131522 消息=方法 'get_Info' 在类型 'Microsoft.EntityFrameworkCore.SqlServer.Infrastructure.Internal.SqlServerOptionsExtension' 来自程序集'Microsoft.EntityFrameworkCore.SqlServer,版本 = 3.0.0.0,文化 = 中性,PublicKeyToken = adb9793829ddae60'没有实现。源=Microsoft.EntityFrameworkCore.SqlServer
我已经安装了最新的Microsoft.EntityFrameworkCore.Proxies版本。
当我用谷歌搜索时,有一些关于延迟加载的信息没有在 EF Core 中实现,但我认为那是在 1.x 中,或者只是被错误地描述了。
我错过了什么?
如果它没有实现,我想知道在我的 WebAPI 上发出带有子对象的对象时,我到底应该如何停止循环引用,但那是另一回事了。谷歌搜索导致我使用懒惰,即。
wpf - ef.net 核心,属性而不是字段
因此,我们将一个旧的 wpf 应用程序移植到 .net core wpf 中。作为努力的一部分,我们还将数据层移动到EF.net core
.
- 由于我们使用 Prism MVVM,在 DI 服务上下文中,我们保留了一个实时数据上下文,它跟踪用户通过 wpf 前端和服务显示和编辑的实体。
- 为了实现“撤消”功能,我们使用跟踪对象
entity.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangingAndChangedNotificationsWithOriginalValues);
在编辑时,对象会更新,在 Reload() 时,它会从跟踪的原始值恢复。就对象而言,操作还可以,但是,wpf 方面却无法正常工作。似乎 ef.net 核心是 wpf 应用程序的一个非常不适应的公民,假设它是 INotifyPropertyChanged 机制的唯一受益者。当然,这对于 WPF 来说一点也不真实。
- EF.net 在加载、重新加载等时似乎不使用属性。它直接在基础字段上工作。因此,NotifyPropertyChanged 永远不会触发,因此网格永远不会用新数据刷新,比如
dbContext.Entry(c).Reload();
. 所以问题 #1,有没有办法强制 ef.net 使用属性而不是字段? - ef.net 的实现
INotifyPropertyChanged
似乎有缺陷。如果您在属性上调用 PropoertyChanged 事件,而不实际更改它,它会将实体标记为Modified
,即使它可以轻松比较原始值和当前值。这禁止我们手动引发属性更改事件来控制 WPF 呈现。不知道如何解决这个问题,或者它是否可以解决,因为它只适用于这个跟踪策略。我愿意接受任何关于如何在不激怒 ef.net 的情况下通知 WPF 元素的建议。 - 确定对象的状态是相当复杂的操作,涉及的操作
dbContext.Entry(entry).State
存在于DataContext
层次结构内的任何 WPF 绑定之外。它使绑定状态几乎不可能(例如更改脏条目的背景或显示保存按钮等)。NotifySetterObject
我们通过从处理INotify*
实现并保留[NotMapped] bool IsDirty
标志的基类继承我们所有的实体类来“解决”它。不用说,我非常不喜欢这样,保留两个未链接的州旗听起来像是一场等待发生的事故。我想知道您是否遇到过类似的问题,以及您是否设计了一个更好、更理智的解决方案。
EF.net 似乎经历了从框架 ef.net 的重大变革转变,因为它只非常适合分离的上下文场景(如 asp.net)。我们是不是在浪费时间试图把这双鞋穿在 wpf 上?我们是否应该专注于更适合现场环境的不同 OR 引擎?
.net-framework-version - EF Core 3.0 preview 7 无法通过 VS2019 nuget 为 .NET Framework 4.8 项目安装
我有一个 .NET Framework 4.8 VS2019 解决方案,目前针对 EF Core 2.0。我试图通过“管理 Nuget 包”将项目升级到 EF Core 3.0 预览版 7,并得到如下错误:Package Microsoft.EntityFrameworkCore.SqlServer 3.0.0-preview7.19362.6 is not compatible with net48 (.NETFramework,Version= v4.8)/赢。包 Microsoft.EntityFrameworkCore.SqlServer 3.0.0-preview7.19362.6 支持:netstandard2.1 (.NETStandard,Version=v2.1)
我已经验证了预览版 6 安装正常,这是有道理的,因为它以 .NET Framework 4.8 支持的 .NET Standard 2.0 为目标。
不幸的是,目前从 .NET Framework => .NET Core 升级我的解决方案文件是不可行的,因为 .NET Core 不支持旧的 WCF/.NET-remoting(并且不会来自我的阅读) . 同样,听起来 .NET Framework 永远不会支持 .NET Standard 2.1。这是否意味着如果我想升级到 .NET Core 3.0 预览版 6,我必须完全放弃使用 EF Core?