在实体框架中更新数据库架构

时间:2020-03-05 18:39:51  来源:igfitidea点击:

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

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

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

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

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

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

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

解决方案

回答

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

这是我的逻辑:

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

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

回答

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

回答

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

回答

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

键是我的杀手I我尚未对外键关系进行任何修改,也未向表中添加主键并使更新程序正常工作(因为它将对生成的代码产生编译错误),但要解决该问题,只需删除模型并重新导入(只需花一分钟),这显然不理想,但是我从来没有遇到过"新鲜"导入失败的麻烦。

回答

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

干杯。

红润

回答

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

  • 我们必须创建自己的数据库管理案例,这些对象将负责创建,更新数据库架构(我手动创建的数据库架构)。
  • 我在ADO.NET Team博客上看到了不错的文章和源代码,然后我们也可以从此博客(它是开源的)下载EDMTools。我们还可以实现模型生成,并从中将例程更新到项目中。
  • 最后,当模式更改时,我们应该在运行时重新创建并绑定模型,并重新构建数据程序集。但是我们必须知道最重要的想法,我们应该使用松散耦合将数据模型程序集绑定到项目(请查看此文章)。否则,我们应该等待EF 4.0发布(现在是CTP 1),他们宣布提供创建,删除,更新DatabaseScript函数。

锁好