小谈EntityFramwork Code First实体更新后的数据库处理

最近在几个公司内部的项目中使用了EF的Code First开发模式,感觉不错,但是也遇到了一些小小的问题.首先对于EF来说与数据库之间有多种开发模式,可以先设计类或者先设计数据库.从程序设计的角度来说Code First是一种很不错的方式,节省了我们对于数据库设计的工作,极大地提高了系统开发的效率。但是如果业务的需求发生变化,Code First就会遇到一些麻烦。 我们之前开发的系统上线2个月之后对于实体做了一些小修改,部署到服务器之后有一些View就出现了500的错误,其原因就是EF Code First在创建数据库的时候针对实体类作了Hash,并将Hash存储在数据库中的EdmMetadat表的ModelHash字段。当系统运行时,EF Code First会将运行的实体与数据库中的ModelHash进行比较,如果不同就会认为系统出现了变化,抛出异常。当然EF提供了一些数据库初始化的功能,但是当检测到变化后,初始化策略只能将原有的数据库删除重新根据实体关系建立数据库。如果数据库中已经有一部分数据,这些数据将会丢失。 目前我找到的一个解决方案是手工处理ModelHash的更新。如果实体发生变化,手工生成数据库变更的脚本,然后再测试机上运行系统,并从新生成的测试数据库中获取ModelHash的值,将这个值更新到生产库上就可以了。当然你也可以写的自动化一些,将测试库里面的ModelHash自动更新到生产库上。 在SQL Server 2008 R2 上有一个叫Data-Tier Application的组件,可以用来帮助用户快速开发和部署数据库应用程序。在部署和升级数据库的时候可以将原有的数据库保存并重新命名,而更新的数据库中还可以保留数据。如果可以将EF Code First与Data-Tier Application结合到一起,应用开发的效率会更高,但是目前还没有听说微软有这方面的打算。

转载于:https://www.cnblogs.com/weisun/archive/2011/07/20/2659279.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值