gpt4 book ai didi

.net - 在 .NET 中创建具有动态属性数量的数据模型的最佳方法

转载 作者:行者123 更新时间:2023-12-01 11:04:35 25 4
gpt4 key购买 nike

我正在编写一个数据访问层,我只想在其中返回每个请求所需的数据。假设您总共可以检索 100 个属性,但普通请求可能只需要其中的两个或三个。

所以我在请求中添加了一个参数,用于指定您要返回的属性,并且只会从数据库中提取这些数据。

普通请求将返回 1,000 - 10,000 行的列表。我现在最关心的是如何有效地归还它们。

数据将在我的 .NET 项目中“内部”使用,但也可能序列化为 XML 和 JSON,因此我不想拥有 98 个空属性,而实际上只有 2 个是填充数据。

那么,用于创建此模型的最佳技术是什么(在性能和“开销大小”的情况下)?

更新:所以一个属性实际上可以有三个状态。如果从未请求过,则应以某种方式将其删除,如果请求过,则应为 null 或实际值。

最佳答案

虽然我同意 Andrei's answer很方便,它肯定会对性能产生影响。如果您的数据是扁平的(确实如此,因为您最终是从数据库中提取数据),那么您可以拥有 IEnumerable<IDictionary<string, object>> IEnumerable<T> 中的每一行是 IDictionary<string, object> 包含行中的值。

开始时比较笨拙,但它是动态的;从结果集中添加或删除属性仍然有效。

它的性能也更高,因为你不会有 (1,000 to 10,000) * N调用反射(1,000 到 10,000)行,次数 N ,每行的属性数(如果每行有 100 个属性,那么将累加 100,000 到 1,000,000 次反射调用)。 DynamicDictionary最终将键/值对存储在查找表中,但它使用反射(通过 DLR 进行了优化,但这仍然是它的核心)来获取查找表。

而且您确实知道属性是什么(您说过您在项目内部使用它,所以您必须知道您想要使用的属性是什么).为此,您真的应该使用强类型 data transfer object具有全部可为 null 的属性,代表数据库中的值;任何为 null 或结果集中不存在的内容都将设置为 null。结果集中不存在的值永远不会被设置。

这样,您就没有反射,可以进行编译时类型检查(这非常重要,使用 DynamicObject 会导致运行时异常),以及更好的性能。 p>

使用这两种方法中的任何一种,XML 或 JSON 中的序列化都很简单,您只需序列化空值,或者根本不序列化属性(如果使用 XML,只需确保您的架构支持将元素作为选项)。

关于.net - 在 .NET 中创建具有动态属性数量的数据模型的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7229912/

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