EF Code First 团队环境下工作方式规范

版权声明:.net/web/医疗技术的木子纵横的个人分享 https://blog.csdn.net/muzizongheng/article/details/85164638

为了实现数据库自动迁移,需要在Package Manager Console 输入 Enable-Migrations –EnableAutomaticMigrations

这个命令添加了一个Migrations文件夹到工程里, 并且文件夹里包含一个Configuration类。我们可以在Configuration类里配置迁移的行为,以及初始化一些出厂数据, 并且启用自动迁移等。

下面有2个命令必须要熟悉:

Add-Migration : 会搭好基于我们在class中做的变更的迁移支架。 

Update-Database: 会应用任何更改到数据库中。

我们应该尽量避免主动调用Add-Migration命令,应该让Code First迁移自动计算并应用变更。(即EnableAutomaticMigrations, 有个局限:当发生属性或者列头更改命名,或者移动数据到另外的表中时,自动迁移不适用)

 理论上如果产品从来没有发布给客户, 其他各开发者也没有自己的数据库数据需要迁移,我们应该不需要执行Add-Migration

上面的操作需要在DbMigrationsConfiguration 类中打开AutomaticMigrationsEnabled 开关, 然后每次DBA更新数据库的code 定义时, 使用者只要获取最新代码, 然后在Package manager console上只执行update-database即可。

每一次数据库变更, 如果产品已经发布给客户, 并且自动迁移不适用, 那DBA需要在Package Manager Console中执行Add-Migration命令,migration命名规范为此次变更的内容, 然后创建迁移code, 


EF CodeFirst 团队协作开发规范

场景1:团队中1人负责DB开发,其他人只使用。

DB开发者:利用EF的migration机制,在产品没有发布之前,工程中不应该有Migrations代码,因为这些开发期的迁移代码对客户没有意义,还会增加性能和质量问题;当产品发布之后,每一次迭代发布时的数据库变更,都应该写迁移逻辑。

迁移逻辑分为2种情况:

  1. 当有列头或者属性名字被更改,或数据从一个表迁移到另一个表时,应该主动写migration代码,具体为在Package Manager Console里执行Add-Migration <name>, 其中<name>为此次变更的描述,必须取值为有意义的名字, 比如Add-Migration ChangeIdToPatientId。然后测试生成的migration的cs文件,确保迁移逻辑ok。

  2. 其他情况下,建议用EF的自动迁移功能, 即在Configuration类中打开AutomaticMigrationsEnabled开关。

其他使用者:

从源代码仓库中获取最新的数据库定义cs代码, 然后在Package Manager Console中执行update-Database即可。 使用者不需要执行Add-Migration命令。如果出现执行错误,在workbench或者其他数据库客户端管理软件中把该数据库schema删除掉,重新执行update-Database即可。

场景2:团队中多人负责DB开发,其他人使用。

DB开发者之间的协作:

本地开发时和场景1类似,定义好数据库字段并生成对应Migration代码后,在提交的时候注意看看有没有其他DB开发者提交了代码。具体来说就是check in的时候如果发现有merge操作,说明有别的DB开发者提交了代码。Merge好数据库定义文件和其他DB开发者提交的Migration之后,执行一次Update-Database命令,

若出现如下warning:

则说明最后一次的迁移代码逻辑和当前数据库定义并不匹配,

解决办法是:创建一个空的迁移代码,数据库并没有变更字段,只是为了让迁移代码和数据库一致。 具体为Add-Migration <name> -IgnoreChanges, 比如:Add-Migration MergePatientID&UserID –IgnoreChanges. 之后再调用Update-Database同步数据库即可。

其他使用者:

和场景1中使用者一样,参考上文即可。

猜你喜欢

转载自blog.csdn.net/muzizongheng/article/details/85164638