以下一段是引用网上别人的经验
“EF Code First在创建数据库的时候针对实体类作了Hash,并将Hash存储在数据库中的EdmMetadat表的ModelHash字段。当系统运行时,EF Code First会将运行的实体与数据库中的ModelHash进行比较,如果不同就会认为系统出现了变化,抛出异常。当然EF提供了一些数据库初始化的功能,但是当检测到变化后,初始化策略只能将原有的数据库删除重新根据实体关系建立数据库。如果数据库中已经有一部分数据,这些数据将会丢失。
目前我找到的一个解决方案是手工处理ModelHash的更新。如果实体发生变化,手工生成数据库变更的脚本,然后再测试机上运行系统,并从新生成的测试数据库中获取ModelHash的值,将这个值更新到生产库上就可以了。当然你也可以写的自动化一些,将测试库里面的ModelHash自动更新到生产库上。”
自已做了几个测试,其结果:
1、如果改变类结构,不改变数据结构,会引起错误
2、如果不改变类结构,但改变数据结构,也会引起错误
3、如果不改变类结构,数据中不改变涉及类结构中的字段,不会引起错误
感觉还不是特别理想,对已有的数据迁移时,是个大问题,灵活性受到很大的限制
1、对已有数据迁移时,限制较多;
2、仅对数据库表结构的支持,无法利用数据库强大的查询分析功能;
3、在大型对象型数据库没出现普及之前,这种利用纯对象模式的操作,与关系型数据库之间转换还是相当的麻烦;
浙公网安备 33010602011771号