EF Code First的局限性
2012-09-08 10:50
204 查看
以下一段是引用网上别人的经验
“EF Code First在创建数据库的时候针对实体类作了Hash,并将Hash存储在数据库中的EdmMetadat表的ModelHash字段。当系统运行时,EF Code First会将运行的实体与数据库中的ModelHash进行比较,如果不同就会认为系统出现了变化,抛出异常。当然EF提供了一些数据库初始化的功能,但是当检测到变化后,初始化策略只能将原有的数据库删除重新根据实体关系建立数据库。如果数据库中已经有一部分数据,这些数据将会丢失。
目前我找到的一个解决方案是手工处理ModelHash的更新。如果实体发生变化,手工生成数据库变更的脚本,然后再测试机上运行系统,并从新生成的测试数据库中获取ModelHash的值,将这个值更新到生产库上就可以了。当然你也可以写的自动化一些,将测试库里面的ModelHash自动更新到生产库上。”
自已做了几个测试,其结果:
1、如果改变类结构,不改变数据结构,会引起错误
2、如果不改变类结构,但改变数据结构,也会引起错误
3、如果不改变类结构,数据中不改变涉及类结构中的字段,不会引起错误
感觉还不是特别理想,对已有的数据迁移时,是个大问题,灵活性受到很大的限制
1、对已有数据迁移时,限制较多;
2、仅对数据库表结构的支持,无法利用数据库强大的查询分析功能;
3、在大型对象型数据库没出现普及之前,这种利用纯对象模式的操作,与关系型数据库之间转换还是相当的麻烦;
“EF Code First在创建数据库的时候针对实体类作了Hash,并将Hash存储在数据库中的EdmMetadat表的ModelHash字段。当系统运行时,EF Code First会将运行的实体与数据库中的ModelHash进行比较,如果不同就会认为系统出现了变化,抛出异常。当然EF提供了一些数据库初始化的功能,但是当检测到变化后,初始化策略只能将原有的数据库删除重新根据实体关系建立数据库。如果数据库中已经有一部分数据,这些数据将会丢失。
目前我找到的一个解决方案是手工处理ModelHash的更新。如果实体发生变化,手工生成数据库变更的脚本,然后再测试机上运行系统,并从新生成的测试数据库中获取ModelHash的值,将这个值更新到生产库上就可以了。当然你也可以写的自动化一些,将测试库里面的ModelHash自动更新到生产库上。”
自已做了几个测试,其结果:
1、如果改变类结构,不改变数据结构,会引起错误
2、如果不改变类结构,但改变数据结构,也会引起错误
3、如果不改变类结构,数据中不改变涉及类结构中的字段,不会引起错误
感觉还不是特别理想,对已有的数据迁移时,是个大问题,灵活性受到很大的限制
1、对已有数据迁移时,限制较多;
2、仅对数据库表结构的支持,无法利用数据库强大的查询分析功能;
3、在大型对象型数据库没出现普及之前,这种利用纯对象模式的操作,与关系型数据库之间转换还是相当的麻烦;
相关文章推荐
- [.NET领域驱动设计实战系列]专题一:前期准备之EF CodeFirst
- EF Codefirst方式数据库维护操作
- EF CodeFirst Newtonsoft.Json转换字符串报错
- EF三种编程方式详细图文教程(C#+EF)之Code First
- EF Code First 一对多、多对多关联,如何加载子集合?
- EF6 Code First & Auto Migration on Appharbor
- Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题
- EF+Code First+Database First+Model First,EF开发流程
- net core ef code first 使用步骤
- TinyFrame系列:基于EFCodeFirst,IOC,AOP的轻型框架
- MVC系列——EF Code First
- EFCode First 导航属性
- 用VS2010自带的Library Package Manager安装EFCodeFirst出现“无法加载一个或多个请求的类型”错误的解决方法
- EF框架step by step(3)—Code-First
- Contoso 大学 - 使用 EF Code First 创建 MVC 应用,实例演练
- EF Code First数据库映射规则及配置
- 在使用EFCodeFirst中出现类型“System.Data.Objects.ObjectContext”在未被引用的程序集中定义的解决方案
- EF Code First Migrations数据库迁移
- EF Code First学习笔记 初识Code First
- EF code first Acceleration - CodeFirst 加速