Я использую драйвер Devart Postgres в качестве провайдера Ado.net с NHibernate. Поскольку NHibernate не поддерживает драйвер Devart Postgres, я написал собственный класс драйвера на основе ReflectionBasedDriver. Вот код:Невозможно загрузить пользовательский поставщик ADO.NET для NHibernate
namespace PostgresDriver.DbDriver
{
class DevartPgDriver : ReflectionBasedDriver
{
public DevartPgDriver()
: base(
"Devart.Data.PostgreSql",
"Devart.Data.PostgreSql.PgSqlConnection",
"Devart.Data.PostgreSql.PgSqlCommand")
{
}
public override string NamedPrefix
{
get { return ":"; }
}
public override bool UseNamedPrefixInParameter
{
get { return true; }
}
public override bool UseNamedPrefixInSql
{
get { return true; }
}
public override bool SupportsMultipleOpenReaders
{
get { return false; }
}
protected override bool SupportsPreparingCommands
{
get { return true; }
}
public override IResultSetsCommand GetResultSetsCommand(NHibernate.Engine.ISessionImplementor session)
{
return new BasicResultSetsCommand(session);
}
public override bool SupportsMultipleQueries
{
get { return true; }
}
protected override void InitializeParameter(IDbDataParameter dbParam, string name, NHibernate.SqlTypes.SqlType sqlType)
{
base.InitializeParameter(dbParam, name, sqlType);
// Since the .NET currency type has 4 decimal places, we use a decimal type in PostgreSQL instead of its native 2 decimal currency type.
if (sqlType.DbType == DbType.Currency)
dbParam.DbType = DbType.Decimal;
}
}
}
Я добавил Devart.Data и Devart.Data.PostgreSql библиотеки DLL в качестве ссылки в моем решении и установить свойство Copy Local 'в True. Я также добавил следующий раздел в App.Config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="Devart.Data.PostgreSql"
fullName="Devart.Data.PostgreSql, Version=7.2.80.0, Culture=neutral, PublicKeyToken=09af7300eec23701">
</qualifyAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="Devart.Data"
fullName="Devart.Data, Version=5.0.872.0, Culture=neutral, PublicKeyToken=09af7300eec23701">
</qualifyAssembly>
</assemblyBinding>
</runtime>
Вот моя hibernate.cfg.xml:
<session-factory name="NHSessionFactory">
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">PostgresDriver.DbDriver.DevartPgDriver, Devart.Data.PostgreSql</property>
<property name="dialect">NHibernate.Dialect.PostgreSQL82Dialect</property>
<property name="connection.connection_string">User Id=***;Password=***;Host=localhost;Port=5433;Database=***;</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property
</session-factory>
Когда я называю sessionFactory = cfg.BuildSessionFactory();
я получаю следующее сообщение об ошибке: "Could not load type 'PostgresDriver.DbDriver.DevartPgDriver' from assembly 'Devart.Data.PostgreSql, Version=7.2.80.0, Culture=neutral, PublicKeyToken=09af7300eec23701'."
Когда я пытаюсь создать экземпляр класса водителя DevartPgDriver dr = new DevartPgDriver();
, я получаю ошибку при статических элементах:
NHibernate.Driver.ReflectionBasedDriver.ReflectionTypedProviderExceptionMessageTemplate
"The IDbCommand and IDbConnection implementation in the assembly {0} could not be found. Ensure that the assembly {0} is located in the application directory or in the Global Assembly Cache. If the assembly is in the GAC, use <qualifyAssembly/> element in the application configuration file to specify the full name of the assembly."
Что мне не хватает? У меня есть проблема, устраняющая эту проблему часами без особого успеха. Пожалуйста помоги!
Это не '<свойство name =" connection.driver_class "> PostgresDriver.DbDriver.DevartPgDriver, Devart.Data' Что представляет собой ваш класс 'PostgresDriver.DbDriver.DevartPgDriver' в? – Rippo
В сборке PostgresDriver. – aparajithanv
Ваш пользовательский класс 'PostgresDriver.DbDriver.DevartPgDriver' в сборке под названием PostgresDriver (уведомление я сказал, что ваш пользовательский класс?) – Rippo