【问题标题】:How to update my entity framework如何更新我的实体框架
【发布时间】:2011-03-20 01:30:15
【问题描述】:

我一直在通过简单地右键单击并单击“从数据库更新模型”来更新我的实体框架。我通常进入“添加”选项卡,然后单击表格并单击完成。我有时也使用“刷新”。这些之间有什么区别?而且当我刷新或添加有时实体出现错误或将一些旧信息保留在缓存中时,我怎样才能让实体与我的数据库匹配并清除任何旧缓存的东西。

【问题讨论】:

  • 我不知道刷新是为了什么;它似乎没有刷新任何东西!我总是删除实体,然后使用添加选项。

标签: c# asp.net entity-framework asp.net-mvc-3


【解决方案1】:

是的,你是对的。设计器有点麻烦,不能很好地处理某些模式更改。通常,当我将表添加到数据库时,我会运行 Update model from database 并在 Add 选项卡中选择表。工作正常。如果我向现有表添加字段,我会使用Update modelRefresh。效果也很好。

但是,如果我添加一个字段并删除另一个字段,或重命名现有字段(据我所知),EF 无法正确处理此问题(添加了一个新字段但未能删除旧字段,并且由于旧字段仍未映射,模型验证失败)。所以在那些更复杂的情况下,我通常会删除实体,然后再次执行Update model from databaseAdd

缺点是,如果您确实进行了一些更改(例如重命名实体的某些字段或导航属性),您将不得不再次进行这些更改。

【讨论】:

    【解决方案2】:

    它不会清理旧物品。你必须自己删除那些。从好的方面来说,Visual Studio 会在你编译时给你一个错误,说明一两个列没有被映射。实体框架工具更像是一个代码生成器。它根据您的数据库的结构生成类,而不是依赖于数据库的结构信息。

    【讨论】:

      【解决方案3】:

      Designer 没有错误,它不处理某些更改的原因是因为 CSDL 和用户所做的一些 MSL 修改没有被覆盖。 CSDL 是您在设计器中看到的图表,而 MSL 是您的实体和关联的映射。

      相信我,与不存在更新的 Linq-to-sql 相比,这是向前迈出的一大步,当您想要刷新模型时,您总是必须删除所有内容,包括您的更改。如果您进行了很多更改,您也可以随时在 EF 设计器中删除您的实体。 EF 设计器提供了更新或重新创建的选择(通过删除旧的)。

      【讨论】:

      • "Designer is not buggy and the reason why it doesn't handle some changes is because CSDL and some MSL modifications made by user are not overwritten" 从数据库运行更新模型时会导致 功能(不是错误!);)
      • 它有问题,取决于您正在使用的 VS 版本。有时它不处理表关联和其他一些东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多