Я отключил отложенную загрузку и создание прокси на моем DbContext. Я использую репозиторий partern и UnitOfWork. Мой UnitOfWork наследуется от DBConext. Вот пример того, что я делаю:
public class User
{
public Guid Id {get;set;}
public virtual Guid UserTypeId {get;set;} //foreign key to UserType and setup in the EF fluent mappings and it does load if I am using lazy loading.
public virtual UserType {get;set;}
}
public class UserType
{
public Guid Id {get;set;}
public string Name {get;set;}
}
Это внутри моего UoW:
public IDbSet<TEntity> CreateSet<TEntity>() where TEntity : class
{
return base.Set<TEntity>();
}
Я запрашиваю контекст через мой репозиторий:
protected Expression<Func<TEntity, object>>[] Includes;
public IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> criteria, params Expression<Func<TEntity, object>>[] includes)
{
Includes = includes;
return GetSet().Where(criteria)
.AsEnumerable();
}
public IDbSet<TEntity> GetSet()
{
var set = _unitOfWork.CreateSet<TEntity>();
if(Includes != null)
{
foreach (var include in Includes)
{
set.Include(include);
}
}
return set;
}
Итак, как вы можете видеть, я передаю массив выражений для включения в мой запрос. Так что я мог бы назвать это так:
var users = userRespository.Get(u => u.Id == SomeGuid, u => u.UserType);
UserType не включен в запрос, и я не знаю что. Должен ли я вызывать что-то кроме Set на DbContext?
Обновление :
Я думаю, прежде чем позвонить в базу. Набор, мне нужно добавить туда включения. Хотя не уверен.