ObjectContext
允许对生成的实体进行通用访问。DbContext
似乎没有这样的支持。使用通用存储库访问 EF5 具有挑战性。假设我想要一个通用机制来读取任何给定的实体,称之为 TEntity:
public class DataRepositoryEF5<T> where T: DbContext
{
private ObjectContext _context;
public DataRepositoryEF5(DbContext context)
{
_context = ((IObjectContextAdapter)context).ObjectContext;
}
public IEnumerable<TEntity> ReadAll<TEntity>() where TEntity : class,new()
{
return GetObjectSet<TEntity>().AsEnumerable();
}
protected ObjectSet<TEntity> GetObjectSet<TEntity>() where TEntity : class,new()
{
ObjectSet<TEntity> result;
result = _context.CreateObjectSet<TEntity>();
return result;
}
}
用法
var context = new MyContext();
var repository = new DataRepositoryEF5<MyContext>(context);
IEnumerable<Document> results = repository.GetAll<Document>();
foreach (var item in results)
{
Console.WriteLine("{0} {1} {2} {3}", item.Description, item.Id, item.Property, item.Whatever);
}
EF 用于生成具有通用基类型的类EntityObject
。由于不再是这种情况,我可以拥有的最佳约束是class
......
其次,因为没有相当于ObjectContext.CreateObjectSet<>()
I am被迫从DbSet
to 转换ObjectSet
。
有了这个模式,我就不需要DbContext
. 如果没有泛型,我不得不手动编写所有 CRUD 操作。我错过了什么?如果没有,是否可以告诉 EF5 生成代码ObjectContext
?