I am using a entity framework wrapper for my project. It works fine if I use only one table for CRUD operation, but unfortunately I am not be able join two tables.
I have seen people are suggesting Include that also I am not be able to use.
Also I have got this but I couldn't understand it.
I am sharing my BaseRepository class below
public class BaseRepository<T> : IBaseRepository<T> where T : class
{
private IUnitOfWork unitOfWork;
private DbSet<T> dbSet;
public BaseRepository(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
this.dbSet = unitOfWork.DbContext.Set<T>();
}
public virtual IEnumerable<T> Get(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "")
{
IQueryable<T> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
public virtual IEnumerable<T> Get()
{
return dbSet.ToList();
}
public virtual IEnumerable<T> Get(Expression<Func<T, bool>> predicate)
{
return dbSet.Where(predicate);
}
public virtual T Get(object id)
{
return dbSet.Find(id);
}
public virtual IQueryable<T> Where(Expression<Func<T, bool>> predicate)
{
return dbSet.Where(predicate);
}
public virtual IQueryable<T> Query()
{
return dbSet;
}
public bool Any(Expression<Func<T, bool>> predicate)
{
return dbSet.Any(predicate);
}
public T First(Expression<Func<T, bool>> predicate)
{
return dbSet.First(predicate);
}
public T FirstOrDefault(Expression<Func<T, bool>> predicate)
{
return dbSet.FirstOrDefault(predicate);
}
public virtual void Insert(T entity)
{
dbSet.Add(entity);
}
public virtual void Update(T entity)
{
if (unitOfWork.DbContext.Entry(entity).State == EntityState.Detached)
{
dbSet.Attach(entity);
}
unitOfWork.DbContext.Entry(entity).State = EntityState.Modified;
}
public virtual void Delete(object id)
{
T entityToDelete = dbSet.Find(id);
Delete(entityToDelete);
}
public virtual void Delete(T entity)
{
if (unitOfWork.DbContext.Entry(entity).State == EntityState.Detached)
{
dbSet.Attach(entity);
}
dbSet.Remove(entity);
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
unitOfWork.DbContext.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public IEnumerable<T> ExecWithStoreProcedure(string query, params object[] parameters)
{
return unitOfWork.DbContext.Database.SqlQuery<T>(query, parameters);
}
}
Please let me know what changes I need to perform in my BaseRepository so that I can perform join.