【问题标题】:Unable to get result from two sets because of `Unable to cast object of type to type 'System.Data.Entity.Infrastructure.IObjectContextAdapter``由于`无法将类型的对象转换为类型'System.Data.Entity.Infrastructure.IObjectContextAdapter`,无法从两组中获取结果
【发布时间】:2022-01-26 10:39:50
【问题描述】:

我正在寻求一种方法来使用实体框架从 .NET 中的 2 个集合中获取结果。从我在互联网上看到的情况来看,大多数方法都类似于this 这里的一种。我做了同样的事情,但我得到了错误

无法将 Domain.Models.AppContext 类型的对象转换为类型“System.Data.Entity.Infrastructure.IObjectContextAdapter”

现在我使用的代码非常简单。这是我的AppContext

public partial class AppContext: DbContext {
    public AppContext() {}

    public AppContext(DbContextOptions < AppContext > options): base(options) {
      Database.EnsureCreated();
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder) {

      base.OnModelCreating(modelBuilder);
    }

    public virtual DbSet < Class1 > Class1 {
      get;
      set;
    }
    public virtual DbSet < Class2 > Class2 {
      get;
      set;
    }

之后,我去函数所在的班级做public ParametarRepository(AppContext context) : base(context)base(context)所在的地方

public class Repository < T >: IRepository < T > where T: BaseEntity {
    protected AppContext _context;
    private DbSet < T > entities;
    public Repository(AppContext context) {
      _context = context;
      entities = _context.Set < T > ();
    }
}

当我执行链接中示例中的代码时,即

public MultiResultDomain GetMultipleResultSetFromSP() {
  MultiResultDomain domainEntity = new MultiResultDomain();
  var connection = _context.Database.GetDbConnection();
  var command = connection.CreateCommand();
  command.CommandText = "dbo.TestResultSets";
  command.CommandType = CommandType.StoredProcedure;
  try {
    connection.Open();
    var reader = command.ExecuteReader();
    List < Class1 > links = ((IObjectContextAdapter) _context).ObjectContext.Translate < Class1 > (reader).ToList();
    reader.NextResult();
    List < Class2 > data = ((IObjectContextAdapter) _context).ObjectContext.Translate < Class2 > (reader).ToList();

    domainEntity.Links = links;
    domainEntity.Data = data;

    return domainEntity;
  } finally {
    connection.Close();
  }
}

我收到了我之前提到的错误。有趣的是,如果我调试它并检查reader 的值,它确实有Class 1 的值,在NextResult() 之后,它也有Class 2 的值,但遗憾的是我无法访问它们代码在我应该将它们转换为对象的部分失败。我拥有的 EF 版本是 3.1.3 和 .NET 3.1 版本

【问题讨论】:

  • 请使用版本标签指示您使用的 EF 版本。可能是某个 EF 核心版本,IObjectContextAdapter 不存在。
  • 刚刚更新并添加了 3.1.3 作为 EF 版本
  • 不清楚你到底想做什么,但是当你有一个成熟的 ORM 时使用存储过程被认为是一种不好的做法

标签: c# entity-framework .net-core dbcontext


【解决方案1】:

EF Core 不支持此功能,跟踪问题为 here

您可以直接与 ADO.NET 互操作,也可以与 Dapper 互操作,后者将为您处理多个结果并具体化对象。见:QueryMultiple

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2021-12-06
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    相关资源
    最近更新 更多