使用Entity Framework 6生成数据库向导时无法选择SQLite
EF6.4.4 + .NET4.8 迁移至SQLite的可行方案
结论前置
确实无法通过EF的数据库生成向导直接选择SQLite作为数据源——VS2022和.NET4.8环境下,官方及第三方的EF设计器组件存在兼容性缺口,尤其是旧版System.Data.SQLite的设计器未适配VS2022,而EF原生的数据库生成向导也未内置SQLite支持。
可行操作步骤
手动搭建SQLite数据库结构
- 从现有EDMX模型导出SQL Server兼容的创建脚本(右键EDMX→生成数据库脚本)。
- 将脚本调整为SQLite语法:
- 把
IDENTITY替换为AUTOINCREMENT(仅主键需用,SQLite普通自增列无需); - 数据类型映射:
nvarchar→TEXT/NVARCHAR,datetime→DATETIME,bit→INTEGER; - 移除SQL Server特有的约束(如
DEFAULT GETDATE()可改为DEFAULT CURRENT_TIMESTAMP)。
- 把
- 用SQLite工具箱执行调整后的脚本,生成
.db数据库文件。
配置EF6与SQLite的关联
- 安装正确的NuGet包:
EntityFramework.Sqlite(此包为EF官方适配,支持.NET4.8和EF6.4.4,无需安装旧版System.Data.SQLite)。 - 修改
app.config的连接字符串和提供程序配置:<!-- 连接字符串 --> <connectionStrings> <add name="YourDbContextName" connectionString="Data Source=|DataDirectory|YourDatabase.db;Version=3;" providerName="System.Data.SQLite.EF6" /> </connectionStrings> <!-- EF提供程序 --> <entityFramework> <providers> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.SQLiteProviderFactory, System.Data.SQLite" /> </providers> </entityFramework> <!-- 数据库提供工厂 --> <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" /> <remove invariant="System.Data.SQLite.EF6" /> <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> </DbProviderFactories> </system.data>
- 安装正确的NuGet包:
验证模型兼容性
- 检查EDMX模型中的主键:确保实体主键标注
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)],让EF自动适配SQLite的自增逻辑。 - 移除模型中依赖SQL Server的函数或特性(如
SqlFunctions.DateDiff),改用EF通用的LINQ方法替代。
- 检查EDMX模型中的主键:确保实体主键标注
数据迁移(可选)
- 若需迁移现有数据:先将SQL Server数据导出为CSV格式,再用SQLite工具箱的导入功能导入;
- 若后续需迭代数据库结构:可将EDMX转换为Code First实体(右键EDMX→生成Code First自跟踪实体),然后使用EF迁移工具:
Enable-Migrations Add-Migration InitialCreate Update-Database
内容的提问来源于stack exchange,提问作者acs676
相关产品推荐
相关产品推荐

