gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:35:56 27 4
gpt4 key购买 nike

我有一个与 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com