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