.Net Framework Data Provider 错误 Fluent Nhibernate for Informix DataBase

.Net Framework Data Provider error Fluent Nhibernate for Informix DataBase

我尝试使用 AutoFac 和 Informix 数据库配置 Fluent Nhibernate,但出现错误:

Unable to find the requested .Net Framework Data Provider. It may not be installed.

工厂休眠

    ISessionFactory factory = Fluently.Configure()
                                 .Database(
                       IfxSQLIConfiguration
                      .Informix1000
                      .Provider<NHibernate.Connection.DriverConnectionProvider>()
                      .Driver<NHibernate.Driver.IfxDriver>()
                      .Dialect<NHibernate.Dialect.InformixDialect>()
                      .ConnectionString(c => c.FromConnectionStringWithKey(databaseKey))
                      .ShowSql())
                      .Mappings(x => x.FluentMappings.AddFromAssemblyOf<TvLoginMapping>()
                      .Conventions.AddFromAssemblyOf<CustomTypeConvention>()
                      )
                      .BuildSessionFactory();
                factories.Add(databaseKey, factory);

WebConfig 文件:

    <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <clear />
    <add name="INFORMIX" connectionString=" Provider=Ifxoledbc.2;Password=*******;Persist Security Info=True;User ID=******;Data Source=******;Database=*****;" />
  </connectionStrings>
  

您可能想在添加条目之前执行 <clear/>

您可以检查 machine.config 以查看是否还有其他 Informix。

我不认为方言 "universal" 适用于您图书馆的所有版本。

见: https://www.symbolsource.org/Public/Metadata/Default/Project/NHibernate/3.0.0.GA/Release/All/NHibernate/NHibernate/Dialect/InformixDialect.cs

注意class的评论:

/// Summary description for InformixDialect.
/// This dialect is intended to work with IDS version 7.31
/// However I can test only version 10.00 as I have only this version at work
/// </summary>
/// <remarks>
/// The InformixDialect defaults the following configuration properties:
/// <list type="table">
///     <listheader>
///         <term>ConnectionDriver</term>
///         <description>NHibernate.Driver.OdbcDriver</description>
///         <term>PrepareSql</term>
///         <description>true</description>
///     </listheader>
///     <item>
///         <term>connection.driver_class</term>
///         <description><see cref="NHibernate.Driver.OdbcDriver" /></description>
///     </i

我没有"Informix"版本的眼睛。所以我猜这只是一个提示。

还要注意有这些方言:

https://www.symbolsource.org/Public/Metadata/Default/Project/NHibernate/3.0.0.GA/Release/All/NHibernate/NHibernate/Dialect/InformixDialect0940.cs?ImageName=NHibernate

https://www.symbolsource.org/Public/Metadata/Default/Project/NHibernate/3.0.0.GA/Release/All/NHibernate/NHibernate/Dialect/InformixDialect1000.cs?ImageName=NHibernate

我使用了错误的配置来使用 Informix 和 OleDbDriver

          ISessionFactory factory = Fluently.Configure()
                                 .Database(
                       IfxSQLIConfiguration
                      .Informix1000
                      .ConnectionString("conectionString")
                      .Driver<OleDbDriver>()
                      .Dialect<InformixDialect1000>()
                        //.ConnectionString(c => c.FromConnectionStringWithKey(databaseKey))

                      .ShowSql())
                      .Mappings(x => x.FluentMappings.AddFromAssemblyOf<TvLoginMapping>()
                      .Conventions.AddFromAssemblyOf<CustomTypeConvention>()
                      )
                      .BuildSessionFactory();
                    factories.Add(databaseKey, factory);
                }

LINQ 是 NHibernate 的替代品之一; Informix 支持它。 不幸的是,Informix 本机 .net 驱动程序不支持 LINQ。 您可能必须使用 DB2 Entity Framework 驱动程序来连接 IDS 服务器。 对于连接 IDS 服务器的 DB2 Entity Framework 驱动程序,您必须启用 IDS 服务器的 DRDA 协议。