0

NHibernate를 사용하여 SQL Server 데이터베이스에 액세스하고 있습니다. 나는 연결 문자열을 암호화 할 수 있기를 원한다. StackOverflow를 읽거나 다른 곳에서, 설정 파일의 connectionStrings 섹션으로 연결 문자열을 분리하고 nHibernate의 connection_string_name 필드에서 연결 문자열을 이름으로 참조하는 방법을 발견했습니다.NHibernate에서 연결 문자열을 분리 한 후 쿼리를 실행할 수 없습니다.

나는 지금까지 모든 지시 사항을 준수했습니다. connection_string 필드만으로 구성한 경우 내 쿼리가 모두 성공적으로 작동합니다. 분리하면 쿼리를 실행할 때 예외가 발생합니다.

.config 파일에는이 섹션이 포함되어 있습니다.

<configSections> 
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"> 
    </section> 
</configSections> 

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property> 
     <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
     <property name="connection.connection_string_name">nHibernateConnection</property> 
     <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property> 
    </session-factory> 
</hibernate-configuration> 

<connectionStrings> 
    <add name="nHibernateConnection" connectionString="Data Source=(local);Password=Rapunz3l!;Persist Security Info=True;User ID=sa;Initial Catalog=VHT_Config" /> 
</connectionStrings> 

초기화 코드가 수행합니다.

var config = new Configuration(); 
config.Configure(); 
sessionFactory = config.BuildSessionFactory(); 

그런 다음 쿼리 코드는이 작업을 수행 : 나는 다음과 같은 예외가

using (ISession session = sessionFactory.OpenSession()) 
{ 
    return session.CreateQuery("from myTable").List(); 
} 

합니다.

myTable is not mapped [from WSConfiguration] 
at NHibernate.Hql.Ast.ANTLR.SessionFactoryHelperExtensions.RequireClassPersister(String name) 
at NHibernate.Hql.Ast.ANTLR.Tree.FromElementFactory.AddFromElement() 
at NHibernate.Hql.Ast.ANTLR.Tree.FromClause.AddFromElement(String path, IASTNode alias) 
at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.CreateFromElement(String path, IASTNode pathNode, IASTNode alias, IASTNode propertyFetch) 
at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElement() 
at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElementList() 
at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromClause() 
at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.unionedQuery() 
at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.query() 
at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.selectStatement() 
at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.statement() 
at NHibernate.Hql.Ast.ANTLR.HqlSqlTranslator.Translate() 
at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Analyze(HqlParseEngine parser, String collectionRole) 
at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionary`2 replacements, Boolean shallow, String collectionRole) 
at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Compile(IDictionary`2 replacements, Boolean shallow) 
at NHibernate.Engine.Query.HQLQueryPlan..ctor(String hql, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) 
at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(String queryString, Boolean shallow, IDictionary`2 enabledFilters) 
at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(String query, Boolean shallow) 
at NHibernate.Impl.AbstractSessionImpl.CreateQuery(String queryString) 
at VHT.Data.VHDAO.RetrieveAll(String tableClass) in C:\Projects\VH\Infrastructure\VHT.Data\VHDAO.cs:line 99 
at MyWS.MyTableComponent.GetMyTableDataSet() 
in MyWS\MyDBComponent.cs:line 169 

connection_string_name이 구성된 경우에만 이것이 실패하는 이유는 무엇입니까? 내가 놓친 게 있니?

감사합니다.

+0

이것은 연결 문자열과 아무 관련이 없습니다. myTable은 매핑 된 클래스가 아닙니다. 아마도 당신은'session.CreateSqlQuery ("select * from myTable")을 원했을 것입니다. List();'는 Sql 쿼리이고 HQL 쿼리가 없습니다 – Firo

+0

흥미 롭습니다. 나는 그것을 시도 할 것이다. 이상하게도 다른 connection_string 구성에 오류가 발생하지 않습니다. – MarkP

+0

불행히도, 그것을 바꾸면 모든 것이 깨졌습니다. 나는 그것이 이상하다는 것을 안다. 그러나 연결 문자열은 내가 바꾼 유일한 것이다. 왜 그것은 하나의 맵핑이 필요하고 다른 맵핑의 맵핑이 필요하지 않습니까? – MarkP

답변

0

CreateQuery는 매개 변수로 HQL 문자열을 사용합니다. HQL을 사용할 때 테이블이 아닌 객체에서 쿼리합니다. 따라서,

session.CreateQuery("from myTable").List(); 

클래스의 이름 myTable에이 클래스는 이름 을 MyTable을 가지고 있지만 경우, 오류

myTable is not mapped 

그래서를 그만 둘 수있는 이름이있는 경우에만 작동합니다 myTable ~ MyTable을 클래스 이름 지정 규칙을 준수하도록 변경하십시오.

+0

시도해 보겠습니다.하지만 connectionString 구성 변경으로 인해 문제가되는 것 같지 않습니다. – MarkP

관련 문제