c# - Entity Framework 设计 - 数据的多个 "Views"

标签 c# entity-framework ef-code-first

我有一个与 Entity Framework 实体相关的设计问题。

我创建了以下实体:

public class SomeEntity {
    // full review details here
}

这个实体例如有 30 列。当我需要创建一个新实体时,这非常有用。我拥有所有必填字段,以便插入到数据库中。

我的应用程序中有几个地方需要显示一些表格数据以及来自 SomeEntity 的一些字段,但我不需要全部 30 列,可能只需要 2 或 3 列。

我是否创建了一个全新的实体,它只包含我需要的字段(它映射到与 SomeEntity 相同的表,但只检索我想要的列?)

或者创建一个域类(如 PartialEntity)并编写这样的查询是否更有意义:

var partialObjects = from e in db.SomeEntities
                     select new PartialEntity { Column1 = e.Column1, Column2 = e.Column2 };

我不确定做这类事情的合适方法是什么。让两个实体映射到同一个表/列是个坏主意吗?我实际上永远不需要创建 PartialEntity 并将其保存到数据库的能力,因为它不会包含所有必需的字段。

最佳答案

您的第一种方法是不可能的。 EF 不支持映射到同一个表的多个实体(TPH 继承或表拆分等特殊情况除外)。

第二种情况是常见的情况。您将为您的 UI 创建 View 模型,并在查询中直接将您的实体投影到 View 模型(它将仅从您投影的数据库列传递),或者您将查询整个实体并在您的应用程序代码中转换为 View 模型(例如通过@Fernando 提到的 AutoMapper)。

如果您正在使用 EDMX 文件进行映射(我想您没有这样做,因为您提到了 ),您可以使用第三种方法,该方法包含上述两种方法。该方法定义了 QueryView - 它是映射实体的基于 EF 的 View ,表现为新的只读实体。通常是直接存储在映射中的可重用投影。

关于c# - Entity Framework 设计 - 数据的多个 "Views",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7718833/

相关文章:

c# - 无法在 asp net core web API 中获取请求 header

c# - File.Move 不继承目标目录的权限?

c# - Javascript 确认对话框 - 防止事件处理程序触发?

entity-framework - EF 代码优先 : CreateIndex - Covering Index

entity-framework - EF Code 中的对称关系优先

c# - 解决条件填充难题的排列/算法

asp.net - Web.config 中使用附加 .mdf 数据库的数据库连接字符串不起作用

entity-framework - EF5 视觉设计更新但模型不是

C# 按实体类型自动创建存储库

c# - Entity Framework 可选关系导致 "conflicting multiplicities"