首页 > 使用Entity Framework的DB First,数据库加一列,而代码未更新的报错问题

使用Entity Framework的DB First,数据库加一列,而代码未更新的报错问题

数据库表加一列,不更新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加载的设置。在验证数据不一致时自动进行迁移。


先试试把这一列设置为可以为NULL试试,这样的话好像不改代码也能运行


据我所知道的因该是不会出错!
实体框架需要和表的字段做映射关系,新增的字段没做映射怎么会出错?
能具体一点?
还是说你新增的一列刚好没默认值,EF插入实体的时候行上有非NULL所以报错?

【热门文章】
【热门文章】