如何在更改数据库结构后正确更新实体模型?

Sla*_*uma 16 entity-framework entity-model

我在表结构中做了一些更改,尤其是SQL Server数据库中表之间的关系.现在我想基于这个新的数据库结构更新我的实体模型.

右键单击edmx文件,我找到"从数据库更新模型"选项.但是当我这样做时,我得到了50%的更新:新的列出现在实体类中,但我对模型中仍然存在的许多导航属性感到困惑,尽管相应的外键关系不再存在数据库.(编辑:尽管数据库中的列已被删除,但模型类中的成员也不会被删除.)

难道我做错了什么?或者是否有其他选项来更新模型,包括删除导航属性?或者我是否必须在模型文件中手动删除这些导航属性?

我正在使用实体框架版本1(VS 2008 SP1).

提前感谢您的帮助!

Cra*_*ntz 16

你正在做正确的更新.但是,在自动生成模型后,您可以自定义它.更新时,EF设计人员希望尝试保留您可能进行的任何自定义.它必须猜测这一点,并不总是正确的.我会尝试解释它是如何猜测的,因为这可能会帮助你.

您的EDMX有三个部分:

  • 客户端架构(CSDL)
  • 存储架构(SSDL)
  • 客户端和商店之间的映射(MSL)

设计者"拥有"商店架构.每次更新时,它都会从头开始重新生成.虽然可以通过手动编辑SSDL来自定义存储架构,但在更新模型时经常会丢失这些更改.

另一方面,您"拥有"客户端架构.设计人员将在第一次运行时为您生成客户端模式,并为新导入的数据库元数据对象生成客户端模式,例如新映射的表或列.但是,一旦为对象生成了客户端模式,它通常就不会重新生成,因为设计人员正在尝试保留您的自定义设置.因此,如果以影响客户端架构的方式更改数据库,则必须手动更新客户端架构.您可以在GUI设计器中执行此操作,也可以在XML中手动执行此操作.

在您的情况下,最简单的方法可能是只选择GUI设计器中的导航并将其删除.这假设在关系的任一侧不再存在数据库中导航的ID属性.

  • 谢谢你的好解释!我将手动删除导航属性和成员字段.如果我弄乱了模型,我将删除edmx文件并从头开始重新创建模型(因为我没有在模型中进行任何自定义). (2认同)