代码之家  ›  专栏  ›  技术社区  ›  Slauma

数据库结构发生变化后,如何正确更新实体模型?

  •  16
  • Slauma  · 技术社区  · 16 年前

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

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

    我使用的是EntityFramework版本1(VS2008SP1)。

    2 回复  |  直到 16 年前
        1
  •  16
  •   Craig Stuntz    16 年前

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

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

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

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

        2
  •  3
  •   ThePG    11 年前

    如果您使用的是一个尚未定制的实体模型,并且只需要将SQL数据库中的更改放到VS项目中,我发现删除实体模型并从相同的源重新生成它是最简单的。这样,EDMX的所有三个部分都将反映数据库中的内容。我以前使用过“从数据库更新模型”选项,然后编辑了XML/designer,发现在处理大型数据库时,这是一项既繁琐又耗时的工作。别误会,它100%工作,但它只是这么快,以保持您的模型新鲜的重建。即使以后确实需要编辑一些linqtosql查询,我发现编辑linqtosql查询比编辑EDMX模型更好。也就是说,我还不必这么做。重要提示:请确保使用与以前相同的设置重新创建模型,例如,如果以前创建模型时没有将对象名称多元化,请执行相同的操作。

    推荐文章