Xamarin Forms、Sqlite、EF Core 3、迁移和很多混乱

Xamarin Forms, Sqlite, EF Core 3, migrations, and lot of confussion

我有一个 Xamarin Forms 应用程序,我已从仅使用 restful API 切换到使用本地 SQLite 数据库,它将使用此 Dotmim.Sync - DB Sync'ing Framework(这太棒了!)。我在 Xamarin 表单项目中使用 EF Core 3 与 SQLite 进行交互。

我的问题是关于 运行ning 迁移或 SQLite 上的数据库更新。我已经阅读了一些关于不同方法的博客和论坛,但它们都已经有好几年的历史了,从 EF Core 1 到 EF Core 2,还有很多变通方法。

  1. https://forums.xamarin.com/discussion/101805/xamarin-android-entity-framework-core-2-and-migrations - 这讨论了通过添加控制台应用程序 运行ning 迁移
  2. https://medium.com/@yostane/entity-framework-core-and-sqlite-database-migration-using-vs2017-macos-28812c64e7ef - 此添加是 Dot Net CLI 工具参考。我试过这个但出现错误,但它也是 EF Core 1.1
  3. https://www.algoworks.com/blog/xamarin-forms-and-entity-framework-core/ - 给了我更多的问题然后是答案。

还有更多链接,但我,这些证明了我采用的所有不同方法的观点。

我想要实现的是:

  1. 当用户打开应用程序时,它会检查是否有数据库版本更新,或者应用程序更新并知道它必须更新数据库。
  2. 当有数据库更新时,Dotmim.Sync 框架控制 Provisioning and Deprovisioning 客户端上的数据库 (Xamarin Forms)。这使 运行 EFCore 迁移或 SQL 脚本有机会更新 SQLite 存储。

选项 1 我想走 EF Core 迁移路径,因为主数据库是用迁移更新的,应用程序将能够利用相同的脚本。如果 运行 在 Xamarin 表单上 运行 时间迁移是可能的,那就太好了。

Q1。 EF Core 运行 能否在 运行 时间内在 Xamarin Forms 应用程序中进行迁移,就像在 .netcore/netframework 项目中一样?

选项 2 如果 运行ning 脚本需要成为很好的路径,我已经探索过这意味着我需要能够 SQLite 模式比较 Tool 1 and tool 2,我在 [=] 上尝试了工具66=]ite db3 出现错误。不愿意为工具 2 付费,除非未经验证它是否有效。

Q2。是否有 SQLite 比较工具来生成架构更改?

Q3。或者部署在客户端上的 sqlite 的数据库更新路径是什么,那会更好,即删除数据库并重新创建它?然后重新同步数据库,以加载回所有用户特定数据。丢失数据的可能性很小,应用程序中的同步逻辑会很频繁,每次用户数据更改事件后都不确定,但如果我们需要确保服务器永远不会不同步,则可能。

希望我说清楚了。谢谢

如果没有,您需要创建 the dummy console app as mentioned. Here are instruction for installing the tools. After that, the normal Migrations workflow should work on Xamarin (Be sure to let us know

Add-Migration MyMigration -P MyNetStandardClassLibrary -S DummyNetCoreApp

您可以使用此方法在运行时应用迁移:

myDbContext.Database.Migrate();