我安装了 VS SP1 并使用了实体框架。

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

除了数据库架构更新之外,大部分进展顺利。

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

  • 添加了一个新表
  • 删除了一个表
  • 向现有表添加新列
  • 从现有表中删除一列
  • 更改了现有列的类型

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

有什么办法可以让设计师的作品成为现实吗?或者目前不支持?我还没有找到任何相关材料,但仍在寻找。

有帮助吗?

解决方案

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

这是我的逻辑:

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

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

其他提示

我发现,总的来说,“从数据库更新模型”功能仍然存在不少错误。

键对我来说是杀手 - 我还没有对外键关系进行任何修改,或者将主键添加到表中并使更新程序正常工作(因为它会在生成的文件上给出编译错误)代码) - 但要解决这个问题,只需删除模型并重新导入(只需一分钟) - 这显然不太理想,但我从未因“新鲜”导入而失败。

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

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

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

干杯。

红润

我按照您的要求构建了类似的应用程序。但我的解决方案太难了。我会尽力讲述;

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

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

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

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

好锁

我执行此操作的方式(我正在执行您提到的所有操作,以及重命名列)是对数据库进行更改并使用 EF Code First 重新生成 EF 代码。

我不会为了好或坏而篡改 EF Code First 类(包括无意义的关系命名列)来简化该过程。

如果生产数据库中包含受限数据,则设计者或 ORM 模式生成器将无法对其进行更改。这就是为什么您应该始终首先检查对数据库的更改是否可行,在开发数据库上尝试它们,然后调整您的代码以反映更改。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top