为啥数据库或语言平台在执行查询时不返回强类型类? [关闭]

Posted

技术标签:

【中文标题】为啥数据库或语言平台在执行查询时不返回强类型类? [关闭]【英文标题】:Why don't databases or language platforms return strongly typed classes when executing a query? [closed]为什么数据库或语言平台在执行查询时不返回强类型类? [关闭] 【发布时间】:2011-10-17 21:03:52 【问题描述】:

为什么在查询数据库时我不只是返回一个包含所有请求字段和正确 Intellisense 的强类型类(或类列表)?

换句话说,“SELECT * FROM Employees”会给我一个带有 Intellisense 的员工对象列表。

我知道有 ORM 解决方案,甚至更简单的对象映射器类型解决方案(Massive、Dapper 等),但这似乎应该是基本数据库或语言平台功能?

我能想到的一个原因是不同的语言,但也许数据提供者应该处理它,而你有像 .NET 这样的语言平台应该屏蔽它......

另一个原因是语言无法动态创建运行时类,Intellisense 似乎不支持这种野兽(但它应该支持!)。

在我的编译器/数据库中阻止这种情况发生的技术细节是什么?是否有工具可以让我立即执行此操作?

【问题讨论】:

"SELECT * FROM " + tableName 的结果应该是什么? Intellisense 怎么可能处理呢? 一方面,您说“我知道有 ORM(但让我们忽略这些)”(意译),另一方面您说“有工具可以让我现在这样做吗? "嗯.... 还有其他人会因为 OP 的名字而笑吗?我知道……我很坏! :) 【参考方案1】:

为什么在查询数据库时我不只是返回一个 具有所有字段的强类型类(或类列表) 请求和正确的智能感知?

因为在 OOP 和 SQL 之间有一个impedance mismatch。

我知道有 ORM 解决方案甚至更简单的对象映射器类型 解决方案(Massive、Dapper 等),但这似乎应该 是基本的数据库或语言平台功能?

不,这就是你有 ORM 的原因。

另一个原因是语言不具备动态运行时的能力 类创建,Intellisense 似乎不支持这样的 野兽(但它应该!)。

.NET 语言大多是静态类型的。

【讨论】:

【参考方案2】:

从根本上说,数据库与客户端是分离的。有一个调用接口和一个结果集 - 如果不进行调用,您无法预料到它。

即使使用 LINQ,元数据也来自项目已知晓的对数据库的单独询问,通常使用“仅格式”选项。

我知道这很令人沮丧,但它有点伴随着被解耦的领域。

这一切都在您开始考虑关系数据库与对象模型中是否存在不同的设计模式以及链接表等实现细节是否在面向对象的世界中甚至具有相应的类之前。

【讨论】:

以上是关于为啥数据库或语言平台在执行查询时不返回强类型类? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在另一个数据库中执行相同查询时不使用索引?

Python 是强类型的吗?

为啥在编译时不检查 lambda 返回类型?

Go开发环境搭建及数据类型控制结构集合类型

为啥说 Python 是强类型语言

为啥 Java 在声明原始数据类型时不允许 null [重复]