entity framework核心中的ObjectStateManager.ObjectStateManagerChanged
我似乎无法在ef核心中找到ObjectStateManager.ObjectStateManagerChanged
。 这已被删除,如果是这样,有什么替代方案?
我想在实体加载到上下文时收到通知。
目前(最新的官方EF Core v1.1.2)没有公共替代方案。 有计划公开Lifetime Hooks ,但根据EF Core Roadmap,它们被推迟,将在即将发布的v2.0版本中不可用。
幸运的是,EF Core公开了所有内部基础设施类/接口,因此我建议在典型的EF Core内部使用免责声明下进行以下解决方法
此API支持Entity Framework Core基础结构,不能直接在您的代码中使用。 此API可能会在将来的版本中更改或删除。
我想到的是利用Microsoft.EntityFrameworkCore.ChangeTracking.Internal
命名空间,更具体地说是ILocalViewListener
接口,它提供了以下方法
void RegisterView(Action viewAction)
viewAction
允许您注册将在任何实体状态更改时调用的委托,包括附加,添加,删除,分离等。
因此,在DbContext
派生类构造函数中,您可以获取ILocalViewListener
服务并注册处理程序,如下所示:
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; using Microsoft.EntityFrameworkCore.Infrastructure; public class MyDbContext : DbContext { // ... public MyDbContext() { this.GetService()?.RegisterView(OnStateManagerChanged); } void OnStateManagerChanged(InternalEntityEntry entry, EntityState previousState) { if (previousState == EntityState.Detached && entry.EntityState == EntityState.Unchanged) { // Process loaded entity var entity = entry.Entity; } } }
在处理程序InternalEntityEntry.ToEntityEntry()
如果您更喜欢使用它而不是内部的InternalEntityEntry
类,也可以使用InternalEntityEntry.ToEntityEntry()
方法来获取常规的EntityEntry
对象(类似于DbContext.Entry
和ChangeTracker.Entries
方法)。
在EF Core v1.1.2中测试并使用。
上述就是C#学习教程:entity framework核心中的ObjectStateManager.ObjectStateManagerChanged分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/942173.html