2015-02-13 5 views
0

вот схема таблицыFluent NHibernate: ошибка 'есть ссылка в поле "" но он не определен'

UserLogin 1 --- * UserMessages 1 --- * UserMessagesReceiver

отображения

public class UserLoginMap : ClassMap<UserLogin> 
{ 
    public UserLoginMap() 
    { 
     Table("UserLogin"); 
     Id(x => x.Id).GeneratedBy.Assigned(); 

     HasMany(x => x.UserMessages).KeyColumn("UserLogin_id").LazyLoad().Cascade.DeleteOrphan().Inverse(); 
     HasMany(x => x.UserMessagesReceivers).KeyColumn("UserLogin_id").LazyLoad().Cascade.DeleteOrphan().Inverse(); 
    } 
} 
public class UserMessageMap : ClassMap<UserMessage> 
{ 
    public UserMessageMap() 
    { 
     Table("UserMessages"); 
     Id(x => x.Id).Column("Id"); 

     References(e => e.UserLogin, "UserLogin_id").Not.LazyLoad(); 
     HasMany(x => x.UserMessagesReceivers).KeyColumn("UserMessages_id").LazyLoad().Cascade.DeleteOrphan().Inverse(); 
    } 
} 
public class UserMessagesReceiverMap : ClassMap<UserMessagesReceiver> 
{ 
    public UserMessagesReceiverMap() 
    { 
     Table("UserMessagesReceiver"); 
     Id(x => x.Id).GeneratedBy.Assigned(); 

     References(e => e.UserLogin, "UserLogin_id").Not.LazyLoad(); 
     References(e => e.UserMessage, "UserMessages_id").Not.LazyLoad(); 
    } 
} 

, то я хочу, чтобы выполнить этот код:

var result = session.QueryOver<UserMessage>() 
        .Where(x => x.UserLogin.Id == 1 //he's the message sender 
           || 
           x.UserMessagesReceivers.Count(y => y.UserLogin.Id == 1) > 0) //he's the one of the message receivers 
        .List(); 

и я получаю сообщение об ошибке:

к переменной «х» «myProject.UserMessage» типа есть ссылка в поле «» но он не определен

что не так ?

ответ

1

Вы не можете выполнять запросы, которые вы запрашиваете в QueryOver. Если вы хотите сделать что-то подобное, что вы будете использовать поставщик NHibernate Linq вместо:

var result = session.Query<UserMessage>() 
        .Where(x => x.UserLogin.Id == 1 || 
           x.UserMessagesReceivers.Count(y => y.UserLogin.Id == 1) > 0) //he's the one of the message receivers 
        .List(); 

.Query() ключ выше

+0

это работает, но что, если мне нужно, чтобы получить различные объекты? Запрос <> будет загружать все элементы, соответствующие критериям, а затем выполнять операцию distint. Лучшим подходом было бы, если бы отдельный был помещен внутри сгенерированного SQL-запроса – Tony

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

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