我已经对表结构进行了一些更改,特别是sql Server数据库中的表之间的关系.现在我想根据这个新的数据库结构更新我的实体模型.
右键单击edmx文件,我找到“从数据库更新模型”选项.但是当我这样做时,我会得到一个50%的更新:新列出现在Entity类中,但是我很困惑,很多导航属性仍然在模型中,尽管相应的外键关系不再存在数据库. (编辑:尽管数据库中的列已被删除,模型类中的成员也不会被删除.)
我做错了吗?还是有更新模式的另一个选项,包括删除导航属性?或者我必须在模型文件中手动删除这些导航属性?
我正在使用实体框架版本1(VS 2008 SP1).
感谢您的帮助提前!
解决方法
你正在做正确的事情来更新.但是,自动生成模型后,您可以自定义模型.当您更新时,EF设计师希望尝试并保留您可能制作的任何自定义.它必须猜到这一点,并不总是正确的.我会尝试解释它是如何猜测的,因为这可能会帮助你.
您的EDMX有三个部分:
>客户端模式(CSDL)
>存储模式(SSDL)
>客户端和商店之间的映射(MSL)
设计师“拥有”商店模式.每次更新时,它都会从头开始重新生成.虽然可以通过手动编辑SSDL自定义存储模式,但在更新模型时,您通常会丢失这些更改.
另一方面,您“拥有”客户端模式.设计人员将首次为您生成客户机架构,并为新引入的数据库元数据对象(如新映射的表或列)生成客户端模式.但是,一旦为对象生成了客户端模式,通常不会重新生成客户端模式,因为设计者正在尝试保留自定义.因此,如果您以影响客户机架构的方式更改数据库,则必须手动更新客户机架构.您可以在GUI设计器中或手动在XML中执行此操作.
在你的情况下,最简单的做法可能就是在GUI设计器中选择导航并将其删除.这是假定在关系的任一侧都不存在数据库中导航的ID属性.