如何删除种子方法引入的种子数据?
How to delete seed data introduced by seed method?
我有一个项目,我在其中引入了一些示例数据供我测试。但是,当我将项目部署到预生产服务器上让我的客户测试时,他说当他删除测试数据时(通过Seed方法引入),下次他登录应用程序时,它仍然存在。有没有办法防止这种情况?
我以为只有在成功更新数据库时才会调用 Seed 方法,但每次应用程序启动时似乎都是 运行。
这有点误导,我知道。种子方法将始终 运行,所以是的 - 您的数据将被重新创建。为了避免这种情况,我所做的是在方法中进行一些简单的检查(例如,如果 DbSet 包含任何记录 -> 不要播种)。
这不是 100% 可靠,因为如果从预生产中删除所有数据 table,它仍将使用测试数据作为种子。但对于我的需求来说,它一直都足够好。
是否迁移 Seed() 运行s 取决于您的数据库初始化程序。如果您使用的是 MigrateDatabaseToLatestVersion,那么每次都是 运行s。您可以将已部署的版本切换到一个初始化程序,该初始化程序不会每次都 运行 Seed 方法,例如 NullDatabaseInitializer。然后,当您需要应用更新时,您可以生成一个脚本 (https://msdn.microsoft.com/en-us/data/jj591621.aspx#script).
查看此处获取种子信息:http://blog.oneunicorn.com/2013/05/28/database-initializer-and-migrations-seed-methods/
我有一个项目,我在其中引入了一些示例数据供我测试。但是,当我将项目部署到预生产服务器上让我的客户测试时,他说当他删除测试数据时(通过Seed方法引入),下次他登录应用程序时,它仍然存在。有没有办法防止这种情况? 我以为只有在成功更新数据库时才会调用 Seed 方法,但每次应用程序启动时似乎都是 运行。
这有点误导,我知道。种子方法将始终 运行,所以是的 - 您的数据将被重新创建。为了避免这种情况,我所做的是在方法中进行一些简单的检查(例如,如果 DbSet 包含任何记录 -> 不要播种)。
这不是 100% 可靠,因为如果从预生产中删除所有数据 table,它仍将使用测试数据作为种子。但对于我的需求来说,它一直都足够好。
是否迁移 Seed() 运行s 取决于您的数据库初始化程序。如果您使用的是 MigrateDatabaseToLatestVersion,那么每次都是 运行s。您可以将已部署的版本切换到一个初始化程序,该初始化程序不会每次都 运行 Seed 方法,例如 NullDatabaseInitializer。然后,当您需要应用更新时,您可以生成一个脚本 (https://msdn.microsoft.com/en-us/data/jj591621.aspx#script).
查看此处获取种子信息:http://blog.oneunicorn.com/2013/05/28/database-initializer-and-migrations-seed-methods/