日期:2014-05-20  浏览次数:21074 次

EF CodeFirst 怎么来更新已存在的数据库结构?
RT。CodeFirst很好用,定义完实体类首次运行就能创建数据库。可就这样问题来了。我在持续开发中,改变了数据库的结构,如果这时候用户已经用以前的版本创建好数据库并且有了许多数据,假使我的修改只增加了一个表的一个可空列。而为此我只能重新创建数据库。请问有没有别的办法,能够把新的数据库结构在不损伤数据的情况下更新到部署好的环境中?

当然我知道自己可以先写SQLScript来提前更新用户环境。但是EF就没有别的办法了吗?只要看到DB不一样就要重新创建?


------解决方案--------------------
告诉你一个我所知道的,非官方的方法。

就是手工修改生成数据库的表结构,以及ModelHash,使得CodeFirst认为模型和数据库相匹配,而不重新创建数据库。
------解决方案--------------------
EF Migration
------解决方案--------------------
在SQL Server 2008 R2 上有一个叫Data-Tier Application的组件,可以用来帮助用户快速开发和部署数据库应用程序。在部署和升级数据库的时候可以将原有的数据库保存并重新命名,而更新的数据库中还可以保留数据。如果可以将EF Code First与Data-Tier Application结合到一起,应用开发的效率会更高,但是目前还没有听说微软有这方面的打算。