Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 管理实体框架迁移_Entity Framework_Ef Code First_Multi Tenant_Entity Framework Migrations - Fatal编程技术网

Entity framework 管理实体框架迁移

Entity framework 管理实体框架迁移,entity-framework,ef-code-first,multi-tenant,entity-framework-migrations,Entity Framework,Ef Code First,Multi Tenant,Entity Framework Migrations,我正在使用Entity Framework开发一个多租户web应用程序,该项目正在积极开发中,这个过程可能需要一到两年的时间。我使用迁移来管理数据库更改、添加新表和子系统、管理数据库触发器、播种默认数据等。它们也将在添加新租户时使用,每个客户可能有多个不同的数据库,应用程序可以使用迁移构建每个数据库 但有一个问题,管理更改和保持迁移干净越来越困难。虽然我们构建了不到10%的系统,但我最终完成了50多个迁移,并且花了几个小时将它们平铺成三到四个逻辑迁移 这种方法还有另一个问题:破坏变化。例如,当我

我正在使用Entity Framework开发一个多租户web应用程序,该项目正在积极开发中,这个过程可能需要一到两年的时间。我使用
迁移
来管理数据库更改、添加新表和子系统、管理数据库
触发器
、播种默认数据等。它们也将在添加新租户时使用,每个客户可能有多个不同的数据库,应用程序可以使用
迁移
构建每个数据库

但有一个问题,管理更改和保持迁移干净越来越困难。虽然我们构建了不到10%的系统,但我最终完成了50多个迁移,并且花了几个小时将它们平铺成三到四个逻辑迁移

这种方法还有另一个问题:破坏变化。例如,当我使用一个
视图时,在主表中添加一个字段并不会更新视图,诸如此类


你知道解决这些问题的方法吗?当您仍在开发应用程序时,您使用什么方法使应用程序能够构建其数据库,并且它会经常更改。

无论您是否进行过一次或多次迁移。应用迁移时,可以设置目标迁移,并且所有迁移操作都作为单个迁移操作执行

您可以通过在package manager控制台中运行
get help Update Database
来检查
Update Database
文档。以下是可能的参数:

更新数据库[-SourceMigration][-TargetMigration][-Script][-Force][-ProjectName][-StartUpProjectName] [-ConfigurationTypeName][-ConnectionStringName][-AppDomainBaseDirectory][]

更新数据库[-SourceMigration][-TargetMigration][-Script][-Force][-ProjectName][-StartUpProjectName] [-ConfigurationTypeName]-ConnectionString-ConnectionProviderName[-AppDomainBaseDirectory][]

如果指定目标迁移,并且
-Script
您将看到所有包含的迁移都创建一个SQL脚本来更新数据库。如果不指定该选项,脚本将被发送到数据库服务器(在项目的连接字符串中)

如果不指定目标迁移,它将数据库迁移到最新的迁移

这回答了你问题的第一部分。你不必担心有一次、一百次或无数次迁移。没有什么能比得上“逻辑迁移”

关于你问题的第二部分,也没有任何问题。如果您需要在应用程序中进行修改,如向表中添加列,则应该使更改解决方案更广泛,即修改数据库(通过使用迁移)并更新解决方案代码以支持新列,即更新业务逻辑、实体、视图、,以及解决方案中的任何相关元素。在这一点上,您有一个稳定的版本。如果部署此版本,并将数据库更新为最新的迁移,它将正常工作,而不会“破坏更改”。因此,每当您的代码中有一个稳定的版本时,您必须给它一个版本号,以便您可以部署该版本的numner。每个版本都有兼容的代码和迁移。您应该使用版本控制系统或任何其他方法来保持稳定的版本

当然,如果您修改了数据库,并且有不兼容的代码(例如,您从表中删除了一列,并且您的代码引用了该列),那么如果您尝试部署它,它将无法工作。因此,您只需小心创建稳定的版本,并且仅当它们处于该状态时才使用版本号标记它们


我有一个应用程序,它具有“update to latest migration”db初始值设定项,并且每当我向应用程序部署升级(甚至降级)时,它都能完美地工作。唯一的必要条件是部署的版本是稳定的。

当涉及到管理迁移时,我经常参考这篇博文。我了解您对逻辑迁移的概念-我们基本上通过滚动多个迁移来实现相同的功能。