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

VS2019下EF Core结合SQLite用于UWP,.NET Standard 2.0项目无法使用迁移如何解决

解决方案

EF Core迁移工具无法直接针对.NET Standard类库执行,本质原因是.NET Standard是API规范而非可运行的实现框架,你只需要指定一个可运行的项目作为迁移执行的宿主即可解决问题,具体操作步骤如下:

步骤1:调整项目依赖配置

  • 存放DbContext的.NET Standard 2.0类库需要安装NuGet包:Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Sqlite、Microsoft.EntityFrameworkCore.Design,所有EF Core相关包需保持版本一致,建议使用3.1.x或5.x LTS版本,更高版本不兼容UWP运行时。
  • UWP主项目引用该.NET Standard类库,同时UWP项目安装NuGet包:Microsoft.EntityFrameworkCore.Tools,版本和类库安装的EF Core包完全一致。

步骤2:执行迁移时指定启动项目

打开Visual Studio的包管理器控制台,将控制台顶部的「默认项目」切换为存放DbContext的.NET Standard类库,执行迁移命令时通过-StartupProject参数指定UWP项目作为执行宿主:

  • 添加迁移命令:Add-Migration InitialCreate -StartupProject 你的UWP项目名称
  • 同步到数据库命令:Update-Database -StartupProject 你的UWP项目名称

如果你使用dotnet CLI执行迁移,对应命令格式为:

dotnet ef migrations add InitialCreate --project 你的.NET Standard类库路径 --startup-project 你的UWP项目路径
dotnet ef database update --project 你的.NET Standard类库路径 --startup-project 你的UWP项目路径

步骤3:异常兼容处理

如果执行迁移时提示找不到DbContext的有效构造函数,可以在.NET Standard类库中新增设计时工厂类,该类仅用于设计时迁移执行,不会影响正式运行逻辑:

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Data.Sqlite;

namespace 你的类库命名空间
{
    public class AppDbContextDesignTimeFactory : IDesignTimeDbContextFactory<你的DbContext类名>
    {
        public 你的DbContext类名 CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<你的DbContext类名>();
            optionsBuilder.UseSqlite("Data Source=temp.db");
            return new 你的DbContext类名(optionsBuilder.Options);
        }
    }
}

注意事项

  • UWP项目的最低支持版本需满足EF Core版本要求,例如EF Core 3.1要求UWP最低版本为10.0.16299
  • 生成的迁移文件会自动存储在.NET Standard类库的Migrations目录下,无需手动调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 18:15:05