2015-12-03 2 views
1

У меня есть ленивые загруженные отношения один к одному. Когда я вызываю select на нем и пытаюсь отфильтровать, где необязательный, не является нулевым, он не получает генерации предложения where для не null. Он привлекает всех пользователей, независимо от того, имеют ли они работу или нет.Lazy загружен один к одному необязательное отношение, не использующее предложение where on select

Мой пользователь:

public class User 
{ 
    public virtual Employment Employment { get; set; } 
} 

Мои Работа

public class Employment 
{ 
    [InverseProperty("Employment")] 
    public User User { get; set; } 
} 

Мой запрос

await (from user in _dataContext.Users 
     where user.Employment != null 
     select user).ToListAsync() 

Этот способ не работает, либо:

await _dataContext.Users 
        .Include(t => t.Employment) 
        .Where(t => t.Employment != null) 
        .ToListAsync(); 

В sql, который он генерирует, предложение where просто не генерируется.

В Fluent Я настраиваю:

b.HasOne(u => u.Employment) 
.WithOne(t => t.User) 
.IsRequired(false); 

Что я здесь делаю неправильно?

+0

В вашем Fluent попробуйте: 'Entity () .HasOptional (u => u.Employment) .WithRequired (e => e.User);' и удалить атрибут InverseProperty: я не думаю, что вы нужно, если вы используете Fluent. Кроме того, подтвердите в своей базе данных, что поле действительно является нулевым: я подозреваю, что это не так, и поэтому генератор SQL игнорирует ваш 'where'. – DrewJordan

+0

У меня уже есть Свободная настройка. И это необязательно. У Занятости есть Userid –

+1

У вас есть внешний ключ? Один к одному возможен только с внешним ключом –

ответ

0

я получил то, что мне было нужно, делая обратное:

await _dataContext.Employment 
        .Include(t => t.User) 
        .Select(t => t.User) 
        .Include(t => t.Employment) 
        .ToListAsync(); 

хотя она по-прежнему не имеет смысла, что где положение будет просто игнорировать.

 Смежные вопросы

  • Нет связанных вопросов^_^