选择要在EF中建模的特定实体

时间:2012-02-29 18:24:40

标签: entity-framework

因此,当我立即使用EF向导并选择一个视图时,它会为视图中的每一列创建实体。如何为特定的几列选择实体生成?我不需要所有这些。此外,DB架构经常更改。我能做些什么来确保它不会破坏我的应用程序?

1 个答案:

答案 0 :(得分:1)

你问了两个问题,所以这将是一个由两部分组成的答案。

[答案1]通过向导生成模型时无法选择特定列。但是,一旦生成模型,删除属性将从模型中删除它(及其映射)。 (请注意,不可为空的列需要作为属性浮出水面,否则您将收到错误。)

[答案2]在回应经常更改的架构方面,最好的办法是确保了解模型下面的内容。 EDMX包含3个部分:

  1. “CSDL” - 这是存储实体定义的“概念模型”。
  2. “SSDL” - 这是跟踪数据库状态的“存储模型”。
  3. “MSDL” - 这定义了两者之间的映射。
  4. 当您的数据库架构发生更改并运行“从数据库更新模型”向导时,您的CSDL和SSDL可能会不同步。这是因为SSDL会随着更改而更新,但CSDL不会(除非您添加新内容)。现在,在大多数情况下,这是一件好事,因为它不会消除您所做的任何更改,因此您的模型仍将适用于您的应用程序逻辑。但是由于SSDL的变化,您可能会看到错误。

    有几种方法可以解决这个问题:

    • 如果对数据库的更改相对简单(添加了列,重命名的表等),您可以简单地重新定义映射(使用实体上下文菜单中提供的“映射详细信息”窗口)。这需要一些手动工作。例如,如果在SSDL中显示新列,则需要自己添加相应的属性。如果重命名表或者删除太多映射,您甚至可能需要重新映射整个实体。
    • 您可以从模型中删除受影响的实体,然后使用“更新”向导重新添加它们。这将破坏您所做的任何自定义,并可能导致您的某些应用程序逻辑中断。但是,如果您通过更新应用程序的代码而不是通过实体映射来更好地响应数据库更改,那么这可能是另一种选择。
    • 您可以手动编辑XML。设计师并不适合所有情况,所以如果情况更糟,你可以随时使用XML编辑器。

    希望有所帮助!可能没有完美的解决方案,但它应该可以帮助您完成大部分工作。