【问题标题】:Modeling entities for specific applications - Entity Framework为特定应用程序建模实体 - 实体框架
【发布时间】:2010-07-16 11:19:52
【问题描述】:

我有 2 个应用程序:

  1. Manager UI - 应该能够创建一个包含所有字段(用户名、电子邮件、年龄等)的用户并显示它们。
  2. 核心组件 - 只需要 UserId 和 Username 字段,并且需要非常高效。它也不应该能够写入数据库。

看来我需要两种不同的模型,一种用于 UI 应用程序,另一种用于核心组件。 当我创建第一个模型时,生活很美好。但是当我尝试创建第二个模型时,我得到了所有不必要的字段。如果我尝试删除它们 - 我设法只为可为空的字段执行此操作,而不是为必需的字段(实际上只需要保存)。 这是我得到的:“必须映射表用户中的列 Users.email:它没有默认值并且不可为空。”

将“电子邮件”字段设置为私有 getter 和 setter 不会解决我的问题,因为我根本不想将值存储在实体上(并从数据库中获取字段) - 正如我所说,这应用程序需要尽可能高性能。

我相信如果我能以某种方式将模型设置为只读,它会解决这个问题,但这只是一种预感(我找不到这样做的方法 - 有吗?)

任何帮助将不胜感激。 谢谢, 尼尔。

【问题讨论】:

    标签: entity-framework data-modeling


    【解决方案1】:

    没有所谓的“只读”实体模型。但是,您可以通过设置 MergeOption 值来执行只读查询,以便不跟踪对实体的更改。您还可以通过投影到匿名类型而不是在查询中返回实体类型来仅选择应用程序中需要的列。因此,您可以在两个应用程序中使用相同的模型,但在“核心组件”中,您会以不同的方式使用模型,从而为只读使用提供更好的性能。

    【讨论】:

      【解决方案2】:

      EF 的真正设计目的是为每个特定用例生成模型。您不应该需要生成单个大型单体模型,因为它们很容易构建和更新(无论如何这是理论)。

      所以我想说您应该生成 2 个模型 - 每个用例场景一个。这意味着您只需要包含每个用例绝对必要的内容。

      【讨论】:

      • 这正是我的观点,但 EF 有一个限制,无论如何都要在模型中包含所有不可为空的字段!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 2015-06-21
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多