You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Entity Framework 6生成数据库向导时无法选择SQLite

EF6.4.4 + .NET4.8 迁移至SQLite的可行方案

结论前置

确实无法通过EF的数据库生成向导直接选择SQLite作为数据源——VS2022和.NET4.8环境下,官方及第三方的EF设计器组件存在兼容性缺口,尤其是旧版System.Data.SQLite的设计器未适配VS2022,而EF原生的数据库生成向导也未内置SQLite支持。

可行操作步骤

  • 手动搭建SQLite数据库结构

    1. 从现有EDMX模型导出SQL Server兼容的创建脚本(右键EDMX→生成数据库脚本)。
    2. 将脚本调整为SQLite语法:
      • 把IDENTITY替换为AUTOINCREMENT(仅主键需用,SQLite普通自增列无需);
      • 数据类型映射:nvarchar→TEXT/NVARCHAR,datetime→DATETIME,bit→INTEGER;
      • 移除SQL Server特有的约束(如DEFAULT GETDATE()可改为DEFAULT CURRENT_TIMESTAMP)。
    3. 用SQLite工具箱执行调整后的脚本,生成.db数据库文件。
  • 配置EF6与SQLite的关联

    1. 安装正确的NuGet包:EntityFramework.Sqlite(此包为EF官方适配,支持.NET4.8和EF6.4.4,无需安装旧版System.Data.SQLite)。
    2. 修改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>
      
  • 验证模型兼容性

    1. 检查EDMX模型中的主键:确保实体主键标注[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)],让EF自动适配SQLite的自增逻辑。
    2. 移除模型中依赖SQL Server的函数或特性(如SqlFunctions.DateDiff),改用EF通用的LINQ方法替代。
  • 数据迁移(可选)

    • 若需迁移现有数据:先将SQL Server数据导出为CSV格式,再用SQLite工具箱的导入功能导入;
    • 若后续需迭代数据库结构:可将EDMX转换为Code First实体(右键EDMX→生成Code First自跟踪实体),然后使用EF迁移工具:
      Enable-Migrations
      Add-Migration InitialCreate
      Update-Database
      

内容的提问来源于stack exchange,提问作者acs676

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:10:29