Я использую NHibernate для доступа к базе данных SQL Server. Я хочу иметь возможность шифровать строку соединения. Чтение StackOverflow и в других местах я нашел инструкции для разделения строки подключения на раздел connectionStrings в файле конфигурации и ссылки на строку подключения по имени в поле connection_string_name nHibernate.Не удалось получить 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? Я что-то упускаю?
Спасибо!
Это не имеет никакого отношения к строке подключения. myTable не является сопоставленным классом. Возможно, вам нужен 'session.CreateSqlQuery (« select * from myTable »). List();' который является запросом Sql и без HQL – Firo
Это интересно. Я попробую это. Странно, что это не дало бы ошибки с другой конфигурацией connection_string. – MarkP
К сожалению, все изменилось. Я знаю, что это странно, но строка подключения - это единственное, что я изменил. Зачем это нужно для сопоставления в одном, а не в другом? – MarkP