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文件中删除该列。 |