在实体框架中更新数据库架构
我安装了VS SP1,并使用Entity Framework。
我从现有数据库创建了一个架构,并尝试了一些基本操作。
除数据库架构更新外,其余大多数都运行良好。
我以各种基本方式更改了数据库:
- 添加了一个新表
- 删除表
- 在现有表中添加了新列
- 从现有表中删除一列
- 更改现有列的类型
前三个运行良好,但是类型更改和列删除没有跟随数据库更改。
有什么方法可以使设计师完成工作吗?还是目前不支持?我尚未找到任何相关材料,但仍在搜索中。
解决方案
回答
我猜可能不会发生,因为它们会破坏现有代码的构建,但这只是我的猜测。
这是我的逻辑:
首先,EF应该具有超过1:1的表映射关系,因此很可能仅仅因为我们要从表A中删除一列并不意味着该实体不应该具有属性Description。我们可能只是将该属性映射到另一个表。
其次,更改类型可能会破坏构建。那是那里唯一的理由。
回答
从我所看到的设计师的演示中,它并不是一个完美的工具。它是1.0版产品,因此肯定会有一些痛点。更改类型似乎是其中之一。通过观察设计人员和代码生成,我发现人们会在编译时(不太可能)或者运行时(实际执行模型时)中断。
回答
我们需要自己从设计器或者XML文件中删除该列。
回答
我发现,通常来说,"从数据库更新模型"功能仍然存在许多错误。
键是我的杀手I我尚未对外键关系进行任何修改,也未向表中添加主键并使更新程序正常工作(因为它将对生成的代码产生编译错误),但要解决该问题,只需删除模型并重新导入(只需花一分钟),这显然不理想,但是我从来没有遇到过"新鲜"导入失败的麻烦。
回答
如前所述,我们可以从设计器中删除该列。至于更改列的数据类型:只需从数据库刷新模型,然后转到表映射并选择在数据库中更改的列即可。右边的值代表模型,奇怪的是,该值不会自动更新,而只需选择右边的列并转到属性并在此处更改数据类型即可。它应该成为一个下拉菜单。
干杯。
红润
回答
我按照要求构建了类似的应用程序。但是我的解决办法是努力。
我会试着告诉;
- 我们必须创建自己的数据库管理案例,这些对象将负责创建,更新数据库架构(我手动创建的数据库架构)。
- 我在ADO.NET Team博客上看到了不错的文章和源代码,然后我们也可以从此博客(它是开源的)下载EDMTools。我们还可以实现模型生成,并从中将例程更新到项目中。
- 最后,当模式更改时,我们应该在运行时重新创建并绑定模型,并重新构建数据程序集。但是我们必须知道最重要的想法,我们应该使用松散耦合将数据模型程序集绑定到项目(请查看此文章)。否则,我们应该等待EF 4.0发布(现在是CTP 1),他们宣布提供创建,删除,更新DatabaseScript函数。
锁好