2017-01-30 1 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"); 
     } 
    } 

私が実行しようとすると、次のコードは結果を返しません:

public IQueryable<User> GetByUserPassword(string userName, string password) 
     { 
      var result = Session.QueryOver<User>() 
       .Where(x => x.Password == password && x.UserName == userName) 
       .List<User>(); 
      return result.AsQueryable(); 
     } 

しかし、私はCreateSqlQuery( "sele 。

result without column names

を、ここで私のNHibernateの構成コードです::[DBO]からのCT *は、[ユーザー] ")メソッドには、カラム名なしで値を返します

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

可能な説明は1つだけです.Userクラスはマップされていません。あなたのUserMapがロードされていません。 –

+0

おそらく、私のCreateSessionFactoryメソッドが正しいと思われます。 –

関連する問題