2011-10-17 3 views
2

データベースを照会するときに、要求されたすべてのフィールドと適切なIntellisenseを持つ強く型付けされたクラス(またはクラスのリスト)を取得するだけではないのはなぜですか?クエリを実行するときにデータベースや言語プラットフォームが厳密に型指定されたクラスを返さないのはなぜですか?

つまり、「SELECT * FROM Employees」では、Intellisenseを使用したEmployeesオブジェクトのリストが表示されます。

ORMソリューションやオブジェクトマッパータイプのソリューション(Massive、Dapperなど)がありますが、これはの基本であると思われますデータベースまたは言語プラットフォームの機能ですか?

私は考えることができる一つの理由は、異なる言語であるが、おそらくデータプロバイダはそれの世話をする必要があり、あなたはそれから保護する必要があるの.NETなどの言語のプラットフォームを持っている...

別その理由は、Intellisenseがそのような獣をサポートしていないように、ランタイムクラスを動的に作成することができないということです(しかし、そうすべきです)。

私のコンパイラ/データベースでこれを防ぐ技術的な詳細はありますか?今私がこれを行うためのツールはありますか?

+0

SELECT * FROM "+ tableName"の結果はどうでしょうか?インテリセンスはどうすればそれに対処できますか? – svick

+3

一方、「私はORMがあることを知っていますが(無視しますが)」(言い換えれば)と言いますが、他方では「今すぐこれを実行できるツールはありますか? Hmmm .... –

+0

他の誰かがOPの名前から笑いを得ていますか?私は知っている...私は悪いです! :) –

答えて

2

なぜそれがデータベースを照会するとき、私はちょうど が要求され、適切なインテリセンスすべてのフィールドで 強く型付けされたクラス(またはクラスのリストを)取り戻すしていないということですか?

OOPとSQLの間にimpedance mismatchがあるためです。私がORMソリューション、あるいは単純なオブジェクトマッパータイプ ソリューションがあります知っている

(マッシブ、Dapperの、等...)しかし、それは、これは 基本的なデータベースや言語プラットフォームの機能であることを思われますか?

いいえ、そういうわけでORMがあります。

もう一つの理由は、言語はインテリセンスが、このような 獣をサポートしていないようだということ、動的なランタイム クラス作成することができないということである(しかし、それが必要!)。

.NET言語のほとんどは静的型です。

2

基本的に、データベースはクライアントから切り離されています。コールインタフェースと結果セットがあります。コールを行わなければそれを予期することはできません。

LINQの場合でも、そのメタデータは、プロジェクトが認識しているデータベースの別の質問から来ており、通常は "formatonly"オプションを使用しています。

私はそれがイライラしていることは知っていますが、それは切り離されている領域があります。

これは、リレーショナルデータベースとオブジェクトモデルのデザインパターンが異なるか、リンクテーブルなどの実装の詳細がオブジェクト指向の世界に対応するクラスを持っているかどうかを検討する前にすべてです。