EF6中调用CreateObjectSet报错:无定义或扩展方法,如何解决?
在EF6中替代CreateObjectSet的解决方案
EF6里DbContext不再直接提供CreateObjectSet方法,要实现相同功能,需要先获取底层的ObjectContext实例,再调用该方法。
修复后的代码示例
using System.Data.Entity; using System.Data.Entity.Core.Objects; using System.Data.Entity.Infrastructure; using (var context_ = new MyEntities()) { // 将DbContext转换为IObjectContextAdapter,获取底层ObjectContext var objectContext = ((IObjectContextAdapter)context_).ObjectContext; ObjectSet<FieldHeader> query = objectContext.CreateObjectSet<FieldHeader>(); replaceField(query, dsSet.Tables[0]); }
额外说明
- 如果
replaceField方法可以兼容DbSet<T>类型,更推荐直接使用EF6的标准写法:
注:DbSet<FieldHeader> query = context_.FieldHeaders; replaceField(query, dsSet.Tables[0]);FieldHeaders是MyEntities中对应FieldHeader实体的DbSet属性,通常为实体类名的复数形式。 - 确保已引用
System.Data.Entity.Core.Objects和System.Data.Entity.Infrastructure命名空间,避免类型找不到的错误。
内容的提问来源于stack exchange,提问作者Frank Martin
相关产品推荐
相关产品推荐

