gpt4 book ai didi

entity-framework - SQLite 包装器 1.0.77 和 .NET 4 下的 Entity Framework

转载 作者:行者123 更新时间:2023-12-03 17:04:50 26 4
gpt4 key购买 nike

我们正在 .NET 4 上开发一个 Windows 应用程序,它使用带有 .NET 包装器的 SQLite 数据库 System.Data.SQLite和 Entity Framework 。在部署机器上,它需要 .NET 4 客户端配置文件。

SQLite 包装器的最新官方版本 (1.0.66) 已有 2 年历史。此版本适用于 .NET 2.0 — 3.5,这意味着我们应该强制用户安装 2 个版本的 .NET。也不支持外键。

还有unofficial release 1.0.77它支持外键,但是,在此版本中对 ORM(.NET Entity Framework )的支持被破坏(它引发 System.Data.ProviderIncompatibleException)。我可以看到三种解决此问题的方法:

  1. 放弃使用此包装器并寻找其他选项。你有什么建议?
  2. 放弃使用 Entity Framework 。这个选项是不可取的,因为它是老派的方式,还需要我们重写很多东西,写更多的代码,增加出现错误的可能性。
  3. 尝试解决 1.0.77 的问题,但我不知道需要多长时间。在这个情况下,你会怎么做?我们还应该查看哪些其他包装器?

最佳答案

最后,我了解了如何让 1.0.77 System.Data.SQLite 程序集 Entity Framework 一起工作并且没有将程序集放置到GAC。

我第一次尝试连接 SQLite 1.0.77 结果是:

System.Data.ProviderIncompatibleException: A null was returned after calling the 'GetService' method on a store provider instance of type 'System.Data.SQLite.SQLiteFactory'. The store provider might not be functioning correctly.

代码分析显示主程序集 System.Data.SQLite.dll 找不到 System.Data.SQLite.Linq.dll。第二个程序集已在项目中引用并存在于输出 bin 文件夹中。但是错误并没有消失。Reflector 显示 System.Data.SQLite.Linq.dll 没有公共(public)类。所以它永远不会自动加载到应用程序域,因为没有代码引用它。因此它必须仅在 GAC 中才能正常工作。但是没有什么可以阻止我们手动将其加载到应用程序域!例如,在应用程序启动时:

Assembly.Load("System.Data.SQLite.Linq");

就是这样!

此外,不要忘记将此行添加到您的应用程序配置中:

<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite"
description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.77.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/>
</DbProviderFactories>
</system.data>

希望我的经验有用。

关于entity-framework - SQLite 包装器 1.0.77 和 .NET 4 下的 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9023050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com