关于.net:在Entity Framework中更新数据库架构

关于.net:在Entity Framework中更新数据库架构

Update database schema in Entity Framework

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

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

除数据库架构更新外,其余大多数都运行良好。

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

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

前三个运行良好,但是类型更改和列删除没有跟随数据库更改。

有什么方法可以使设计师完成工作? 还是目前不支持? 我尚未找到任何相关材料,但仍在搜索。


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

这是我的逻辑:

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

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


我发现,通常来说,"从数据库更新模型"功能仍然存在许多错误。

键是我的杀手--我尚未对外键关系进行任何修改,也未向表中添加主键并使更新程序正常工作(因为它会在生成的文件中产生编译错误)代码)-但是要解决该问题,只需删除模型并重新导入即可(只需花一分钟),这很简单-显然不理想,但我从未因"新鲜"导入而失败。


从我所看到的设计师的演示中,它并不是一个完美的工具。它是1.0版产品,因此肯定会有一些痛点。更改类型似乎是其中之一。通过观察设计者和代码生成,我发现人们会在编译时(不太可能)或运行时(实际执行模型时)中断。


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

我并没有篡改EF Code First类的好坏(包括用于关系的无意义的列)以简化流程。

如果设计数据库或ORM模式生成器中的数据受限制,则将无法对其进行更改。这就是为什么您应该始终从检查数据库更改是否可行开始,在开发数据库上进行尝试,然后修改代码以反映更改的原因开始。


我按照您的要求构建了类似的应用程序。但是我的解决办法是努力。
我会试着告诉;

  • 您必须创建自己的数据库管理案例,并且这些对象将负责创建,更新数据库模式(我手动创建的)。

  • 我在ADO.NET Team博客上看到了不错的文章和源代码,然后您也可以从此博客(它是开源的)下载EDMTools。您还可以实现模型生成,并从中将例程更新到您的项目中。

  • 最后,当您的模式更改时,您应该在运行时重新创建并绑定模型并重建数据程序集。但是您必须知道最重要的想法,您应该将数据模型程序集与项目进行松散耦合(请查看此文章)

    否则,您应该等待EF 4.0版本(现在为CTP 1),他们宣布将提供创建,删除,更新DatabaseScript函数。

  • 锁好


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

    干杯。

    红润


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


    推荐阅读