Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用FluentNHibernate+;SQLite与.NET4?_.net_Sqlite_Fluent Nhibernate_.net 4.0 - Fatal编程技术网

使用FluentNHibernate+;SQLite与.NET4?

使用FluentNHibernate+;SQLite与.NET4?,.net,sqlite,fluent-nhibernate,.net-4.0,.net,Sqlite,Fluent Nhibernate,.net 4.0,我有一个WPF应用程序在VS2010.Net3.5上运行,它使用Nhibernate和FluentNHibernate+SQLite,所有这些都可以正常工作 现在我想改用.Net4,但这已经变成了比我预想的更痛苦的经历。。设置连接时,我会执行以下操作: var cfg = Fluently.Configure(). Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("MyDb.db")). Mappings(m =

我有一个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();                    

有人成功地使用Fluent与.Net4和SQLite吗?救命啊!我迷路了

我在NH、VS2010、.Net4上也遇到了类似的问题,但在Oracle ODP.Net驱动程序和32位上却遇到了类似的问题

解决方案是在web.config文件中声明一个具有显式版本号的“限定程序集”。看我的


也许此解决方案也适用于您的问题。

检查您的系统版本。数据参考。在我看来,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>

当我尝试使用.Net4和SQLite流畅时,也收到了相同的错误消息,但当我仔细观察时,发现了不同的错误消息

无法加载类型System.Data.SQLite.SQLiteConnection,System.Data.SQLite。 System.IO.FileLoadException:混合模式程序集是根据运行时版本“v2.0.50727”构建的,如果没有其他配置信息,无法在4.0运行时中加载。

因此,我所做的是向“startup”标记添加useLegacyV2RuntimeActivationPolicy=“true”,如下所示

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

我不需要在“runtime”标记中添加dependentAssembly或任何内容。根据这一点和这一点,它应该只用于移民援助。所以希望SQLite很快就会更新

希望这有帮助!
Karlkim通过在项目调试设置中将目标平台更改为x86,成功地解决了这个问题。我正在使用vs2010

无法从NHibernate.driver.SQLite20Driver创建驱动程序,NHibernate,版本=2.1.2.4000,区域性=neutral,PublicKeyToken=aa95f207798dfdb4

解决方案:

测试设置:
选择主机
选择在64位计算机上运行64位进程中的测试

是的,先生:让它与.NET 4-Fluent NHibernate-NUnit一起工作 通过使用上述帖子中的信息,我成功地使它在VisualStudio2010下工作 在我的NUnit库中进行测试,在调试模式下为任何CPU编译

首先,我得到的例外情况与你们中的一些人经历的一样:

无法从NHibernate.driver.SQLite20Driver创建驱动程序,NHibernate,版本=3.1.0.4000,区域性=中性,PublicKeyToken=aa95f207798dfdb4

我已经使用NUGet为.NET的v4.0.30319下载了SQLite的1.0.76.0版本。上面的Devios帖子和他的摘要链接让我开始测试App.config文件中的assemblyBinding,告诉VS 2010为NHibernate使用正确版本的System.Data.SQLite。下面是我在App.Config中输入的内容:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <qualifyAssembly partialName="System.Data.SQLite" 
      fullName="System.Data.SQLite, Version=1.0.76.0, 
      Culture=neutral, 
      PublicKeyToken=db937bc2d44ff139"/>
    </assemblyBinding>
  </runtime>
但是现在我有了一个.NET 4版本的SQLite,我不需要运行旧的.NET 2版本和传统模式-避免在使用进程内并行运行时主机激活时进一步发生潜在冲突-Google MSDN:

当较新版本的.NET Framework CLR加载程序集时 这是根据CLR的早期版本compatibility构建的 可能会出现问题,应用程序可能会停止工作。这 任何托管程序集都可能发生这种情况,包括完整应用程序和 插件中(托管程序集在 主机应用程序)。唯一能保证更新版本的 NET框架不会影响现有的应用程序 所有现有托管应用程序都在其原始目标中运行 编译的.NET框架版本

谢谢你们为我指明了正确的方向!
希望从现在起,我们之后的其他人能够更轻松地解决这个问题

我在这页上尝试了所有的解决方案,但都没有效果。然后我卸载了我的64位版本,使用了Nuget的x86版本,一切正常


PM>安装软件包System.Data.SQLite.x86

2.x SQLite与3.x是否存在问题?不知道。。你觉得呢?那它为什么要与.Net3.5一起工作呢?将很快尝试最新的SQLite版本。您最近是否也升级到了NHibernate的更高版本?我在2.1.2.4000上也遇到过类似的问题(但在这种情况下是MySQL)。没有-一直在使用同一版本的NHibernate。使用.NET3.5时,所有操作都正常。然后我改为使用.NET4,问题显示出来了。谢谢,但我没有web.config,因为这是一个wpf应用程序。我可以将其添加到app.config吗?web.config是web应用程序的名称,app.config是其他所有类型应用程序的名称。所以:是的!尝试添加此内容时没有运气。。有关我添加的内容的详细信息,请参见问题中的编辑。这听起来很有希望!您完全正确,我现在引用的是System.Data版本4.0.0.0(运行时版本v4.0.30319)。我尝试将程序集绑定添加到app.config,但没有结果。它应该在标签内吗?两者都试过了。。有什么不对劲?旧版本?如何找到正确的版本?System.Data.SQLite.dll不应该随System.Data版本一起提供吗?它需要嵌入的数据版本?还是会因为应用程序文件夹中有可用的版本而感到困惑,但版本错误?SQLite是否应该与最新版本的System.Data一起工作?从您在评论中所说的,我确信这就是问题的原因。是的,程序集绑定配置应该在运行时标记中。要检查已安装的System.Data的版本,请启动visual studio命令提示符并运行命令:gacutil-l System.Data。我没有运行VS2010的最新版本,所以可能有一个机会,t
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <qualifyAssembly partialName="System.Data.SQLite" 
      fullName="System.Data.SQLite, Version=1.0.76.0, 
      Culture=neutral, 
      PublicKeyToken=db937bc2d44ff139"/>
    </assemblyBinding>
  </runtime>
 <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>