【发布时间】:2018-10-25 15:54:29
【问题描述】:
根据this documentation,我的 uwp 项目(带有实体框架)中有 SQLite 数据库。
我有一个针对周年纪念更新的 uwp 项目,所以当时这个文档很旧,我不得不在我的 uwp 项目中添加数据库代码和内容(而不是在 .Net 标准项目中)因此该项目已被许多用户通过商店安装,显然他们现在都在他们的设备上创建了一个数据库,比如说 Db1.db。
一年后,我更新了我的应用并将其重新定位到创作者更新,我在一个新项目中进行了此操作,因为我必须对我的应用进行一些重大更改,所以我想要一个干净的项目开始,我添加了我的功能和还以与先前项目相同的数据库名称 Db1.db 相同的方式添加了数据库内容,然后我也将其发布到存储。
问题
现在,当我发布我的第二个包时,它在 DBContext.Migrate() 方法上崩溃了,该方法应该在 app.xaml.cs 的构造函数中,我知道它崩溃了因为数据库的名称相同,并且两个项目只有 1 个名为 MyFirstMigration 的迁移,并且不知何故会发生冲突并导致应用程序崩溃。我可以确认这一点,因为在我更新了我的第二个包(针对创建者更新)并将数据库名称更改为 Db2.db 之后不久,我没有崩溃,因为现在应用程序忽略用户设备上的旧数据库,只创建和使用新数据库,这不是最好的方法,因为我现有的用户无法访问他们在 Db1 中的数据,尽管新用户不会'不会受到影响,因为他们的所有数据仅在 Db2 中。
现在的情况是这样的:
用户组 1 这些用户的旧数据在 db1 中,新数据在 db2
用户组 2 这些用户的所有数据都在 db2
我可能会继续从头开始创建新项目以针对更新的 SDK,因为我喜欢从头开始进行更新的主要更新,这有助于我轻松地重构整个应用程序。那么如何在我的新项目中使用相同的数据库名称而不会使应用程序崩溃呢?我没有更改我的模型,我的模型将保持不变,并且无论我向商店发布多少新项目,我都只想继续使用 1 个数据库文件,应用程序应始终与该 1 个数据库文件通信。如果我只是从旧项目中复制 Migrations 文件夹并将其粘贴到新项目中并保持该迁移文件夹在我的新版本中保持一致,这可能吗?还是有其他方法?
另外请注意,现在在我的较新项目中,我的最低目标将是秋季创建者更新,因此我将使用 .net 标准库将我的数据库内容保存在那里,如我上面提到的文档中所述,所以我想继续使用db2.db 在我的新项目中也是如此。
【问题讨论】:
标签: c# entity-framework sqlite uwp entity-framework-core-migrations