我遇到了让nhibernate与sqlite玩得很好的问题:
我的NHibernate配置:
<NHibernate>
<hibernate xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.connection_string">Data Source=test.db;New=True;</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
<property name="use_outer_join">true</property>
<property name="show_sql">false</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<mapping assembly="SimpleGallery" />
</session-factory>
</hibernate>
</NHibernate>
我在Windows 7 64位上运行。我已经尝试将system.data.sqlite.dll的x86和64位版本复制到输出目录,并引用它们并将它们设置为复制本地但无效。 VS解决方案已设置为编译到任何/ x86 / 64bit,但我仍然得到例外:
“{”无法找到程序集System.Data.SQLite中的IDbCommand和IDbConnection实现。确保程序集System.Data.SQLite位于应用程序目录或全局程序集缓存中。如果程序集位于GAC中,请使用应用程序配置文件中的元素指定程序集的全名。“}”
我错过了什么?
答案 0 :(得分:2)
我在4月份打了这个,终于让它运转了 - 什么是PITA!尝试更改配置以支持混合加载并添加如下所示的运行时重定向。
我希望有一个SQLite版本可以解决这个问题,但我猜不是。如果您发现其他情况,请告诉我。
干杯,
Berryl
<!-- SQLite requires this mixed mode load setting-->
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<requiredRuntime version="v4.0.20506"/>
</startup>
<runtime>
....
<!-- SQLite is built with older System.Data so we need this redirect -->
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089"/>
<bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
....
</runtime>