数据库表加一列,不更新WEB程序,执行到这张表相关的EF代码时会报错,将这张表对应的实体更新后可正常使用。
应该很多人会反问为什么更新了数据库不更新代码,原因如下:
我们系统的架构是一台DB对多台WEB服务器,多台服务器使用了负载均衡,假设为DB、web1、web2、web3
生产环境在部署的时候,我们先将web1切出负载均衡,然后更新web1的dll和配置等,然后更新数据库(表A加了一列),然后单点链接web1来测试新功能是否成功上线。那么问题来了,此时由于web2和web3还没有更新,而DB已更新,导致所有EF对表A的操作都会抛错。
有什么解决方案吗?
您是用的Code First 更新的数据库吧?这次更新会把相应数据库里的一个EF的表增加一条记录。这时更新表结构的web server 是和DB匹配的,而没更新的web会和DB发生冲突。办法我想到了一个,得调整EF更新数据库的策略,让web被出发时自动更新数据库,不要在命令行执行update什么的。这样先切出负载均衡,更换程序,部署不触发,同时将原来未改的切出,并且切入更改后的。然后再把其他的web更新,保持一致。最小限度停机过度了。此法需要调整EF加载的设置。在验证数据不一致时自动进行迁移。