为了账号安全,请及时绑定邮箱和手机立即绑定

将这些方法从 EF 6 转换为 EF Core

将这些方法从 EF 6 转换为 EF Core

C#
慕侠2389804 2022-12-31 10:37:27
我一直在尝试实现一种解决方案,以在断开连接的情况下正确设置实体上的状态(在这种情况下,每次调用 NetCore API 都会加载 DBContext 的新实例)。Julie Lehrmann 的 Book Programming Entity Framework 中有一个解决方案,它提出了一个我想要实现的解决方案。不幸的是,它是为 EF 6 编写的。如何为 EF Core 编写这些方法?public BreakAwayContext(){  ((IObjectContextAdapter)this).ObjectContext    .ObjectMaterialized += (sender, args) =>    {      var entity = args.Entity as IObjectWithState;      if (entity != null)      {        entity.State = State.Unchanged;        entity.OriginalValues =          BuildOriginalValues(this.Entry(entity).OriginalValues);      }    };}private static Dictionary<string, object> BuildOriginalValues(  DbPropertyValues originalValues){  var result = new Dictionary<string, object>();  foreach (var propertyName in originalValues.PropertyNames)  {    var value = originalValues[propertyName];    if (value is DbPropertyValues)    {      result[propertyName] =        BuildOriginalValues((DbPropertyValues)value);    }    else    {      result[propertyName] = value;    }  }  return result;}最后这个方法private static void ApplyChanges<TEntity>(TEntity root)  where TEntity : class, IObjectWithState{  using (var context = new BreakAwayContext())  {    context.Set<TEntity>().Add(root);    CheckForEntitiesWithoutStateInterface(context);    foreach (var entry in context.ChangeTracker      .Entries<IObjectWithState>())    {      IObjectWithState stateInfo = entry.Entity;      entry.State = ConvertState(stateInfo.State);      if (stateInfo.State == State.Unchanged)      {        ApplyPropertyChanges(entry.OriginalValues,         stateInfo.OriginalValues);      }    }    context.SaveChanges();  }}非常感谢您帮助我将其翻译成 EF Core 兼容代码!原始代码可以在这里找到 https://www.oreilly.com/library/view/programming-entity-framework/9781449331825/ch04.html
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您很快将不再需要将它们迁移到 EF Core,因为EF 6.3 将以 .NET Standard 2.1 为目标

要使用它,您需要将项目迁移到 .NET Core 3.0 或 .NET Standard 2.1 for libraries。

.NET Core 3.0 将在今年下半年发布,或者你可以像现在一样使用预览版 SDK 冒一点风险。


查看完整回答
反对 回复 2022-12-31
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信