C#Entity Framework - 使用模型优先设计处理破坏性自动数据库脚本

时间:2012-04-05 17:06:03

标签: c# entity-framework sql-server-ce

我最近开始了一个新的个人项目来学习实体框架。我的最终目标是制作一个桌面游戏,使用SQL compact进行数据管理,并使用Entity Framework作为游戏对象。实际上并不知道有多种方法可以启动EF(模型优先,代码优先,db优先)我首先选择最明显的模型选择。

我现在已经成功地使用它了,但有一点让我担心,尤其是后期开发。我对游戏的目标是用户可以更新到最新版本而不会丢失任何现有数据。当前的问题是所有生成脚本本质上都是破坏性的(丢弃所有内容然后重新创建它) - 这意味着我无法在“生产”中针对用户SQLCE DB运行那些脚本,所以我需要提出一个替代计划行动。

那就是说,有没有人推荐过最佳实践的解决方案?在以前的桌面应用程序中,我传统上使用XML /二进制文件来存储数据,这使我可以轻松更新“模式”而不会影响现有数据(应用程序中的版本控制根据版本定制Load(),而Save( )总是保存在最新版本中。)

使用SQLCE处理此问题有哪些建议?

1 个答案:

答案 0 :(得分:2)

如果理解正确,您需要的是利用EF附带的迁移。由于问题是一般性的,这个链接应该最好地指导你我需要的东西......

http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx

对于可以根据需要手动定制的迁移(并且以逐步增加的方式在每个变更点应用的代码形状),如果需要,您还可以提供“播种”。
即,您应该能够完成所需的大部分工作,删除,删除旧的不兼容数据 - 并为您拥有的新数据播种 - 以及所有与您拥有的特定迁移步骤相关的数据。

如何专门针对您的应用部署,我认为这有点复杂,但这应该让您开始,然后每次db版本更改,您的新代码更新将包含自上次更新以来的所有迁移(或者只是一个通常是足够的,即使每个更新成为一个)以及拆除或创建新事物的代码。

希望这有帮助,