c# – 对DbContext的通用访问

前端之家收集整理的这篇文章主要介绍了c# – 对DbContext的通用访问前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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的类.由于不再是这种情况,我可以拥有的最佳约束是……

其次,因为没有ObjectContext.CreateObjectSet<>()的等价物,我被迫从DbSet转换为ObjectSet.

有了这个模式,我就不需要DbContext了.没有泛型,我被迫手工编写所有CRUD操作代码.我错过了什么?如果没有,是否可以告诉EF5使用ObjectContext生成代码

解决方法

看看我刚刚发布的这个 tip

无论如何,技巧是使用context.Set<>

public interface IEntity
        {
            int Id { get; set; } 
        } 

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class,IEntity
    {
        private IDbContext _context;
        public Repository(IDbContext context)
        {
            _context = context;
        }
          private IDbSet<TEntity> DbSet
         {
            get
            {
                return _context.Set<TEntity>();
            }
         }
          public IQueryable<TEntity> GetAll() 
          {
             return DbSet.AsQueryable(); 
          }
        public void Delete(TEntity entity)
        {
             DbSet.Remove(entity);
        }
.....
原文链接:https://www.f2er.com/csharp/244959.html

猜你在找的C#相关文章