У меня есть User
, который присваивается Client
. Когда вытаскиваете объект User
, я получаю объект Client
как часть его. Просто.Entity Framework не всегда включает дочерние объекты
Это работает как следует при входе в систему. Объект User
имеет Client
, вне зависимости от того, с кем я вхожу.
Однако, используя тот же метод, точный получить User
как при входе в систему, чтобы изменить его через меню администратора, то Client
иногда null
.
Я говорю иногда:
1) В Firefox - При попытке просмотра сведений о большинства, но не все пользователи (и я сам), то Client
прилагается к User
будет null
. Только пара Users
будет доступна для просмотра из-за фактически существующего Client
.
2) В Chrome - все пользователи (ЗА ИСКЛЮЧЕНИЕМ себя) видны. Только при попытке просмотра моего собственного пользователя Client
будет null
.
Я не понимаю; Оба браузера просто будет тот же URL,, т.е. /Users/EditGet/28
и даже с использованием двух различных методов (GetById
и GetByUserName
) он обеспечивает те же результаты - хотя по общему признанию, как сделать использование базы Получить функции:
Edit: BaseService класс вместе а над изменениями.
internal CustomContext context;
internal DbSet<TEntity> dbSet;
public BaseService(CustomContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
IQueryable<TEntity> query = dbSet.Where(e => !e.Deleted);
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split(new [] {','}, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
return orderBy != null ? orderBy(query).ToList() : query.ToList();
}
Я не уверен, почему выбор браузера должен повлиять на результаты внутреннего запроса вообще. Разумеется, он должен вернуть Client
с User
независимо от того, какой браузер я использую.
Я предполагаю, что, возможно, основной недостаток с базой Получить метод, но это не объясняет поведение, что я вижу ...
Если кто-то может пролить свет на это, я был бы очень признателен ,
Edit 2: CustomContext:
public class CustomContext : DbContext, ICustomContext
{
public IDbSet<User> Users { get; set; }
public IDbSet<Client> Clients { get; set; }
}
Учитывая, что весь этот код работает на сервере, я сомневаюсь, что это зависит от браузера, но это так, как вы заметили, поэтому может быть, что 'includeProperties' является параметром, переданным на одну из страниц mvc и является неправильно отформатирован, чтобы сплит не работал? Поместите точку прерывания на строку запроса 'query = query.Include (includeProperty);' и посмотрите, все ли она удалена –
@QuintonBernhardt: каждый раз это делает каждый раз. Нет проблем с использованием разделения запятой, он правильно попадает в нее для каждого включенного свойства. Даже SQL, сгенерированный EF, является правильным (с использованием SQL Profiler), и выполнение запроса возвращает все, что нужно, но «Клиент» просто не создается и не связан. – Krenom
Почему переменный запрос типа 'IQueryable 'вместо ожидаемого' DbQuery '? IQueryable не имеет метода 'Include', поэтому я не вижу, как это не дает компиляции в строке .Include –