【发布时间】:2015-11-26 00:00:51
【问题描述】:
对于 3d 方应用程序插件,必须使用 SQLite 实体框架数据库优先方法。我搜索了所有互联网,包括Add a DbProviderFactory without an App.Config、Problems using Entity Framework 6 and SQLite 和许多其他。我尝试以不同的方式和组合使用它们,但没有任何帮助:
"一个未处理的异常类型 在 mscorlib.dll 中发生“System.Data.Entity.Core.MetadataException”。 附加信息:指定的架构无效。错误: AutosuggestModel.ssdl (2,2):错误 0152:没有实体框架提供程序 为具有不变名称的 ADO.NET 提供程序找到 'System.Data.SQLite.EF6'。确保提供程序已在 应用程序配置文件的“entityFramework”部分。”
解决方案中有一个测试控制台应用程序。使用这个最小的 App.config 它可以工作:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
</configuration>
连接字符串已经在代码中实现。使用的包是:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net452" />
<package id="System.Data.SQLite" version="1.0.98.1" targetFramework="net452" />
<package id="System.Data.SQLite.Core" version="1.0.98.1" targetFramework="net452" />
<package id="System.Data.SQLite.EF6" version="1.0.98.1" targetFramework="net452" />
<package id="System.Data.SQLite.Linq" version="1.0.98.1" targetFramework="net452" />
</packages>
请提供所有必需的代码并指定插入位置。提前致谢。
【问题讨论】:
-
sqlite 和 EF 的问题是:数据库初始化程序无法正常工作,因为包中不支持创建数据库和创建表(至少我使用的版本)。您的代码确实看起来很奇怪。首先定义不变的 System.Data.SQLite.EF6,然后不再使用它。您的问题与提供商无关,而是与代码有关。尝试将 DbProviderFactories 中的不变量重命名为“System.Data.SQLite.EF6”,但这里可能还缺少其他错误。
-
谢谢,但是有了这样的 App.config 一切正常,我已经有了数据库。我需要应用程序在没有 App.сconfig 的情况下运行。借助上面链接的答案,可以删除“system.data”部分,但其他部分仍然需要。
-
啊,你是这个意思。好吧,您需要 app.config,因为您让 DbContext 知道 EF 必须使用此连接类型。你的 DbContext 的构造函数有一个重载,它实际上需要一个 SqlConnection,我认为它可能会起作用,调用如下:base(new SQLiteConnection([connection string]),true)
-
再次感谢,但是“连接字符串已经在代码中实现了”。
标签: c# .net entity-framework sqlite app-config