2017-01-30 2 views
0

В моем проекте у меня есть класс с именем пользователя со следующим определением:Nhibernate QueryOver не работает, но CreateSqlQuery работает

public class User 
    { 
     public virtual Guid UserId { get; set; } 
     public virtual string UserName { get; set; } 
     public virtual string Password { get; set; } 
    } 

и вот картографа класс:

public class UserMap : ClassMap<User> 
    { 
     public UserMap() 
     { 
      Id(x => x.UserId).Column("UserId"); 
      Map(x => x.UserName).Column("UserName"); 
      Map(x => x.Password).Column("Password"); 
     } 
    } 

, когда я пытаюсь выполнить следующий код не возвращает никакого результата:

Но когда я использую CreateSqlQuery ("sele . Кар * из [DBO] [Пользователь] ") метод возвращает значение без имен столбцов:

result without column names

и вот мой Nhibernate код конфигурации:

public class NHibernateSessionFactory 
    { 
     private ISessionFactory sessionFactory; 

     private readonly string ConnectionString = "";  

     public NHibernateSessionFactory(String connectionString) 
     { 
      this.ConnectionString = connectionString; 

     } 

     public ISessionFactory SessionFactory 
     { 
      get { return sessionFactory ?? (sessionFactory = CreateSessionFactory()); } 
     } 

     public ISessionFactory CreateSessionFactory() 
     { 
      try 
      { 
       return Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2008.ConnectionString(x => x.FromConnectionStringWithKey(ConnectionString))) 
       .Mappings(m => 
         m.FluentMappings 
          .AddFromAssemblyOf<User>()) 
       .ExposeConfiguration(config => new SchemaUpdate(config).Execute(false, true)) 
       .BuildSessionFactory(); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 


     } 
    } 

чем проблема?

+0

На скриншоте окна, похоже, произошло исключение, возможно, при запуске запроса QueryOver. Это так? Если да, можете ли вы опубликовать информацию об исключении? –

ответ

2

Не используйте QueryOver, используйте только запрос:

var result = Session.Query<User>() 
      .Where(x => x.Password == password && x.UserName == userName); 
//already IQueryable<User> 

Это было полезно, но моя ошибка была ошибка в добавлении MapClass ассамблею, которая была в другой сборке:

.AddFromAssemblyOf()

+0

Снова пустой список –

+2

Только одно возможное объяснение: класс пользователя не отображается. Ваша UserMap не загружается. –

+0

Возможно, но, как вы видите, мой метод CreateSessionFactory кажется правильным! –

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