在Entity Framework中更新数据库模式

时间:2008-08-15 11:15:05

标签: .net entity-framework schema

我安装了VS SP1并使用了Entity Framework。

我从现有数据库创建了一个模式,并尝试了一些基本操作。

除了数据库架构更新外,其中大部分都进​​展顺利。

我以各种基本方式更改了数据库:

  • 添加了一张新表
  • 删除了一张表
  • 在现有表格中添加了新列
  • 从现有表中删除了一列
  • 更改了现有列的类型

前三个进展顺利,但是类型更改和列删除没有跟随数据库更改。

有没有办法让设计师工作?或者目前不支持?我还没有找到任何相关材料,但仍在搜索。

7 个答案:

答案 0 :(得分:6)

我猜这可能不会发生,因为它们会破坏现有代码的构建,但这只是我的猜测。

这是我的逻辑:

首先,EF应该是超过1:1的表映射,所以很可能只是因为你从表A中删除一个列并不意味着对于那个实体,不应该有一个属性描述。您可以将该属性映射到另一个表。

其次,更改类型可能会破坏构建。那是唯一的理由。

答案 1 :(得分:5)

我发现,一般来说,“从数据库更新模型”功能仍有不少错误。

密钥对我来说是杀手锏 - 我还没有对外键关系进行任何修改或者向表添加主键并使更新程序正常工作(因为它会产生编译错误)关于生成的代码) - 但要解决这个问题,删除模型和重新导入(只需要一分钟)就很简单了 - 这显然不太理想,但我从来没有因为'新鲜'而失败导入。

答案 2 :(得分:1)

从我见过的设计师的演示中,它不是一个完美的工具。它是1.0版本的产品,所以它必然会有一些痛点。变化类型似乎是其中之一。从观察设计器和代码生成开始,我认为在编译时(不太可能)或在运行时(实际执行模型时)会中断。

答案 3 :(得分:0)

您需要自己从设计器或XML文件中删除该列。

答案 4 :(得分:0)

如前所述,您只需从设计器中删除该列即可。至于更改列的数据类型:只需从数据库刷新模型,然后转到表映射并选择在DB中更改的列。右边的值代表你的模型,奇怪的是它不会自动更新,只需选择右边的列并转到属性并在那里更改数据类型。它应该成为一个下拉菜单。

干杯。

答案 5 :(得分:0)

我按照你的要求建立了类似的应用程序。但我的解决方案很难。 我会试着说出来;

  1. 您必须创建自己的数据库管理条款,这些对象将负责创建,更新数据库架构(我手动创建)。

  2. 我在ADO.NET Team blog上看到了很好的文章和源代码,那么你也可以从这个博客下载EDMTools,它是开源的。您还可以将模型生成和更新例程实现到项目中。

  3. 最后,当您的架构发生更改时,您应该重新创建并绑定模型并在运行时重建数据程序集。但是你必须知道最重要的想法,你应该将你的数据模型程序集与松散耦合的项目联系起来(查看这个post

    其他方面,你应该等待EF 4.0发布(现在是CTP 1),他们宣布他们将提供创建,删除,更新DatabaseScript功能。

  4. 好锁

答案 6 :(得分:0)

我这样做的方式(我正在做你提到的所有事情,再加上重命名列)是通过更改数据库并使用EF Code First重新生成EF代码。

我没有篡改EF Code First类的好坏(包括非感知命名的关系列)来简化这个过程。

如果生产数据库中的数据受到约束,则任何设计人员或ORM模式生成器都无法对其进行更改。这就是为什么你应该始终检查你对数据库的更改是否可行,在开发数据库上尝试它们然后调整代码以反映更改。