【发布时间】: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