c# - Entity Framework 工具不适用于 UWP 应用程序 C#

标签 c# .net sqlite uwp entity-framework-core

启动项目“EFGetStartedUWP”是一个通用 Windows 平台应用程序。此版本的 Entity Framework Core 包管理器控制台工具不支持此类项目。有关将 EF Core 工具与 UWP 项目结合使用的详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=858496

为了学习,我正在尝试将 SQLite 数据库连接到基本的 UWP 应用程序,但是当我尝试迁移时。它只是不断给我上面的错误。我在互联网上搜索了很多,但没有得到合适的答案。 Microsoft 文档在这种情况下没有用处。我还安装了 Microsoft.EntityFrameworkCore.Sqlite 和 Microsoft.EntityFrameworkCore.Tools。

如果有人可以建议任何其他方式将 SQLite 数据库连接到 UWP,那也将非常有用,因为我对 C# 还很陌生,而且我有一个大学项目要在 UWP 应用程序上完成。

最佳答案

我刚刚遇到了类似的问题,并且很幸运地解决了它。首先,我发现这些链接非常有用: Entity Framework Core tools reference - .NET Core CLI - Other target frameworksCommon options .

就我而言,我的解决方案最终的配置如下:

  • 应用程序项目(通用 Windows)- 解决方案的启动项目,
  • 类库项目 (.NET Standard 2.0) - 包含模型和上下文类,
  • 虚拟控制台应用项目 (.NET 6.0) - 必须充当工具的启动项目。

考虑到(在撰写本文时)UWP doesn't support .NET Standard 2.1 。它支持 .NET Standard 2.0 从版本 10.0.16299 开始。这意味着(通用 Windows)应用程序项目无法引用 .NET Standard 2.1 项目(例如 .NET 5.0、.NET Core 3.0、Mono 6.4 等),因此 类库项目不能是 .NET 2.1、.NET 5.0 等。反之则不然:.NET 5.0 或 .NET 6.0 项目可以引用 .NET Standard 2.0 项目,因此虚拟项目控制台应用项目可以是.NET 6.0。

添加迁移的步骤:

  1. 类库项目中,安装所使用的相应 EFCore 平台的 Nuget 包(例如,对于 SQLite,安装 Microsoft.EntityFrameworkCore.Sqlite)。 不要安装最新版本,而是安装依赖于 .NET Standard 2.0 的最后一个版本,在撰写本文时该版本为 3.1.21
  2. 虚拟控制台应用项目中,安装此 Nuget 包:Microsoft.EntityFrameworkCore.Design。出于兼容性目的,请安装与上一步中选择的版本相同的版本(例如 3.1.21)。
  3. 应用程序项目中,添加对类库项目的引用。 (右键单击该项目,选择添加 > 项目引用...,然后勾选类库项目。)
  4. 虚拟控制台应用项目中,添加对类库项目的引用。请注意,尽管不必构建项目(部署较少),但无需更改虚拟控制台应用项目中的任何其他内容,因此请随意打开配置管理器 em>,然后取消选中构建(和部署)。此外,在配置管理器中,不必费心将平台(x64、任何CPU...)更改为与引用的类库项目相同。毕竟,将不会构建虚拟控制台应用项目,因此请忽略有关架构与类库项目不同的任何警告。
  5. 重建您的解决方案以确保没有其他问题发生。如果有,请在继续之前修复它们。
  6. 打开命令提示符(提示:使用 Windows 文件资源管理器导航到解决方案的根文件夹,然后在地址栏中键入 cmd 以在该位置打开命令提示 rune 件夹)。
  7. 输入以下内容(-p 表示目标项目,而 -s 表示启动项目):

?> dotnet ef migrations add #MigrationName -s #DummyConsoleAppProject -p #ClassLibraryProject

  • (可选)卸载虚拟控制台应用项目,并在下次需要它添加迁移时再次加载。
  • 关于c# - Entity Framework 工具不适用于 UWP 应用程序 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59444014/

    相关文章:

    c# - MonoTouch.Dialog RootElement 的自定义标题

    c# - 使用 LINQ 在数组中查找最小和最大日期?

    c# - 为什么 WithMergeOptions(ParallelMergeOptions.NotBuffered) 不立即提供结果?

    sqlite - Sequelize 生成的列 sqlite

    java - 数据库查询以获取范围内的记录

    c# - 按给定值选择 json 标记

    java - 如何将Java代码转换为C#代码?

    .net 应用程序无法连接到 DB2 数据库

    sqlite - Sqlite 服务器中的 DateAdd 函数,以列名作为输入

    ios - 将值插入 fmdb 时出错