11

实体框架代码首先是一个开发新项目的好框架。但是如何扩展现有的数据库呢?用实体框架更新数据库模式代码首先

例如,如果我只是想添加一个额外的属性到现有的数据实体呢?有没有“代码优先”的方式来做到这一点,或者我将不得不使用SQL Server Management Studio或类似的工具手动添加数据库列?

我到目前为止发现的所有内容都是如何在模式更改时从头开始重新生成整个数据库,但我不想丢失数据。

如果我没有弄错,Ruby on Rails有一个工具可以生成反映新数据库更改的SQL脚本。 EF Code First也有办法做到这一点吗?

+0

如果您有任何不希望丢失的大数据......我会说使用模式优先模型。这不是一种选择吗?除了dba不可用之外,您会从先使用代码中获得什么好处?请赐教.... – 2013-11-14 17:31:43

+0

@sam yi:在写这篇文章两年后,我倾向于同意你的评论 - 尽管从开发者的角度来看,代码优先的方法似乎仍然吸引人。简单地将一个属性添加到类中比操作SQL命令更简单,并且之后生成更新我的EF类。 – 2013-11-15 16:22:59

回答

8

我目前正在使用EntityFramework.Migrations库来解决演变数据库模式的问题。它可以创建生成SQL脚本来更新模式的迁移类。

它目前仍处于测试阶段,但我发现它很有用。不幸的是,你仍然应该生成数据迁移脚本。

你可以找到更多的信息here

7

不幸的是没有。目前没有办法在EF代码中先增加数据库。 ADO.NET team described some approach他们正在研究,但这些工具尚未发布。唯一的方法是使用数据库或模型的第一种方法。这意味着您可以直接在数据库中建模您的更改并继续编码,也可以使用EDMX模型和Database Generation Power Pack逐步构建您的数据库。您仍然可以通过在EF 4.1中添加新的T4模板从EDMX生成DbContext,但是您将失去定义实体类(它们将由模板创建)的方式。

3

我正在处理类似的问题。

我使用EF模型的第一种方法。我使用由sql EF生成的数据库项目。

基本上我有一个正常的数据库项目,但表sql是由EF模型生成的SQL。

仅供参考数据库项目能够在现有数据库上生成更改脚本而不会丢失所有数据。您可以设置一个数据库项目来警告您,如果正在执行的更改对数据有害并且不会在这种情况下运行。

我还没有完成我的解决方案(改变SsdlToSql10.tt,它使用它来生成sql,使它对数据库项目更友好!)。

+0

感谢您的建议。当我需要部署新版本时,我正在使用Visual Studio数据库架构比较工具来生成架构迁移。它工作正常,但更自动化的解决方案将受到欢迎。如果我有时间,我会看看数据库项目,这听起来很有趣。 – 2011-07-19 16:44:35

1

Visual Studio有一个工具架构比较。修改代码后,您可以生成数据库,然后使用模式比较来修改您的数据库项目或其他数据库

+1

感谢您的建议。这正是我现在正在做的。它的工作原理,但我正在寻找与EF更紧密结合的东西。 EF.Migrations实际上正是我所期待的 – 2012-03-20 06:44:22

相关问题