sti*_*k81 12 .net sqlite .net-4.0 fluent-nhibernate
我有一个WPF应用程序运行VS2010 .Net3.5使用Nhibernate与FluentNHibernate + SQLite,一切正常.
现在我想改为使用.Net4,但这已经变成了一种比我想象的更痛苦的经历..在设置连接时我这样做:
var cfg = Fluently.Configure().
Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("MyDb.db")).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>());
_sessionFactory = cfg.BuildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
BuildSessionFactory()调用抛出FluentConfigurationException:
创建SessionFactory时使用了无效或不完整的配置.检查PotentialReasons集合和InnerException以获取更多详细信息.
内部异常为我们提供了更多信息:
无法从NHibernate.Driver.SQLite20Driver,NHibernate,Version = 2.1.2.4000,Culture = neutral,PublicKeyToken = aa95f207798dfdb4创建驱动程序.
而且还有InnerException:
无法找到程序集System.Data.SQLite中的IDbCommand和IDbConnection实现.确保程序集System.Data.SQLite位于应用程序目录或全局程序集缓存中.如果程序集位于GAC中,请使用应用程序配置文件中的元素指定程序集的全名.
现在 - 对我来说听起来似乎没找到System.Data.SQLite.dll
,但我无法理解这一点.引用的所有地方我都有"复制本地",我已经验证它是在使用SQLite的项目的每个构建文件夹中.我还手动将它复制到解决方案的每个Debug文件夹 - 没有运气.
笔记:
在@ devio的回答后,我尝试添加对SQLite dll的引用.这没有改变任何东西,但我希望我做对了..这是我添加到app.config文件的根节点的内容:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="System.Data.SQLite" fullName="System.Data.SQLite, Version=1.0.60.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
有没有人使用Fluent成功使用.Net4和SQLite?救命!我迷路了...
当我尝试使用.Net4和SQLite时,我也得到了相同的错误消息,但是当我仔细观察时,我发现了不同的错误消息.
无法加载类型System.Data.SQLite.SQLiteConnection,System.Data.SQLite.System.IO.FileLoadException:混合模式程序集是针对运行时的版本"v2.0.50727"构建的,如果没有其他配置信息,则无法在4.0运行时中加载.
所以我做的是将useLegacyV2RuntimeActivationPolicy ="true"添加到"startup"标签中.
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
Run Code Online (Sandbox Code Playgroud)
我不需要在"runtime"标记内添加dependentAssembly或任何内容.根据此链接文本和此链接文本,它应仅用于迁移辅助.所以希望SQLite很快就会更新.
希望这可以帮助!Karlkim
检查System.Data参考的版本.听起来像System.Data.SqlLite一样,找不到它所构建的IDbCommand和IDbConnection的版本,我怀疑它是版本2.0.0.0.我怀疑现在您已升级到.Net 4,您正在引用System.Data版本4.0.0.0.
如果是这种情况,您应该能够添加绑定重定向来解决问题:
<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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8238 次 |
最近记录: |