如何从多个存储库实体中检索数据?

时间:2013-05-08 04:31:03

标签: asp.net-mvc linq

在我的MVC应用程序中,我创建了执行CRUD操作的通用存储库,而不是直接使用Context对象。

上下文类名{EDMX]:CustomEntity.Edmx

通用存储库代码:

public interface IRepository<T> : IDisposable where T : class
    {
        IQueryable<T> GetAll();
        IEnumerable<T> Find(Expression<Func<T, bool>> predicate);
        T FindFirst(Expression<Func<T, bool>> predicate);
        T GetFirst();
        T GetLast();
        void Add(T entity);
        void Delete(T entity);
        void Update(T entity);
        void SaveChanges();
    }

    public class GenericRepository<T> : IRepository<T> where T : class
    {
        private ObjectContext _context;
        private IObjectSet<T> _objectSet;

        public GenericRepository(ObjectContext context)
        {
            _context = context;
            _objectSet = _context.CreateObjectSet<T>();
        }

        public IQueryable<T> GetAll()
        {
            return _objectSet;
        }

        public IEnumerable<T> Find(Expression<Func<T, bool>> predicate)
        {
            return _objectSet.Where<T>(predicate);
        }

        public T GetFirst()
        {
            return _objectSet.FirstOrDefault();
        }

        public T FindFirst(Expression<Func<T, bool>> predicate)
        {
            return _objectSet.First<T>(predicate);
        }

        public T GetLast()
        {
            return _objectSet.LastOrDefault();
        }

        public void Delete(T entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }
            _objectSet.DeleteObject(entity);
        }

        public void Add(T entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }
            _objectSet.AddObject(entity);
        }

        public void Update(T entity)
        {
            _context.ObjectStateManager.ChangeObjectState(entity, EntityState.Unchanged);
            _objectSet.Attach(entity);
            _context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);  
        }

        public void SaveChanges()
        {
            _context.SaveChanges();
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (_context != null)
                {
                    _context.Dispose();
                    _context = null;
                }
            }
        }

使用genric存储库创建了三个存储库:

// CustomEntity-DataContext文件[Edmx]

 vat dat1=GenricRepository<table1> (new CustomEntity());
    vat dat1=GenricRepository<table2> (new CustomEntity());
    vat dat3=GenricRepository<table3> (new CustomEntity());

这里上面为实体创建了三个存储库,这些存储库被称为相同的上下文。我想在LinQ等单个查询中从三个Repository中检索数据。

但我可以直接在上下文[EDMX]中执行此操作:

Using(CustomEntity custom=new CustomEntity())
{
var reocrds=(from t1 in custom.table1
from t2 in custom.table2
from t3 in custom.table3
where t1.id==t2.id&&t1.cusid==t3.cusid
select t1).ToList();
}

请您建议如何从存储库实体dat1,dat2,dat3

中检索数据[上下文中的相同查询]

0 个答案:

没有答案