3

次の要件を考慮して、ORMを活用しようとしています。

1).NET Frameworkの使用(最新のFrameworkで問題ありません)
2)Sybase、Oracle、MSSQLを互換的に使用できる必要があります
3)スキーマはほとんど静的ですが、動的な部分があります。

私はSubSonicとNHibernateにある程度精通していますが、深くは知りません。
ORMは自分のやりたいことができるというしつこい感じがしますが、今のところそれを活用する方法がわかりません。

SubSonicは現在Sybaseをサポートしていないため、おそらく最適ではありません。独自のプロバイダーを作成することは、現在のところ私のリソースと能力を超えています。

#3(上記)の場合、ベンダーが既存のデータベースに「固定」できるテーブルを説明するメタデータテーブルがいくつかあります。これらのMetaTablesMetaFields
を 呼び出しましょう。

ORM(NHibernate ATM)が適切に処理する基本静的スキーマがあります。
ただし、ベンダーは、メタデータテーブルにデータを追加して構造を説明する限り、データベースにテーブルを(物理的に)追加できます。

私が本当に望んでいるのは、ORMにそのメタデータを(理解できる方法で)何らかの形で「フィード」し、その時点でデータを操作できるようにすることです。

私の主な目標は、これらの動的テーブルで実行する必要のある汎用SQLステートメントの作成量を減らすことです。
また、Sybase、Oracle、またはMSSQLに送信されるSQLの違いについて心配する必要はありません。

私の主な問題は、メタデータにアクセスできる実行時まで、動的テーブルについてORMに通知する方法がないことです。

編集:使用法の例は、ここで概説されているようなものかもしれません:

IDataReader rdr = new Query( "DynamicTable1")。WHERE( "ArbitraryId"、2).ExecuteReader();

(ただし、Sybaseプロバイダーがないため、SubSonicが機能するようには見えません(上記を参照)

4

5 に答える 5

1

このブログによると、実際に動的マッピングで NHibernate を使用できます。ちょっと手直しが必要ですが…

于 2008-12-11T21:07:28.957 に答える
1

NHibernate を使用していくつかのことを行いましたが、必要な ROI が得られなかったため、プロジェクトを中止しました。私たちは、非常にうまく機能する独自の ORM/SQL レイヤーを作成することになりました (私はそこで働いていないので機能しましたが、まだ機能していると思います)。

私たちのシステムは、オープン ソース プロジェクトを使用して SQL を生成し (名前はもう覚えていません)、すべてのクエリを独自の Xml ベースの言語 (クエリ マークアップ言語 - QML) で作成しました。次に、selects、wheres、groups などを使用して xmlDocument を作成し、それを SqlEngine に送信して、それを Sql ステートメントに変換して実行することができます。このすべてでキャッシュについて説明しますが、実装することはありません。これにより、頻繁に使用されるクエリの Qml をキャッシュすることができました。

于 2008-10-14T07:40:16.960 に答える
0

ADO.NET Entity Frameworkの使用を検討しましたか?

MSDN:LINQ to Entities

これにより、使用されているデータベースベンダーを気にせずに、またDBAによって実際のテーブルに加えられる小さな変更を気にせずにコーディングできるように、データベーステーブルをオブジェクトモデルにマップできます。マッピングは、再コンパイルを必要とせずにdbテーブルが変更されたときに変更できる構成ファイルに保持されます。

また、LINQ to Entitiesを使用すると、OO方式でクエリを作成できるため、実際のSQLクエリ文字列を記述していません。

于 2008-10-19T05:13:24.863 に答える
0

実行時にormがどのように使用されるかについて少し混乱していますか? ORM が実行時に何かを動的に構築する場合、実行時コードは orm が動的に行ったことをどのように認識しますか?

「その時点でデータを操作できるようにしてください」 - データの操作とは何ですか?

ここに何かが欠けている可能性があります。その場合はお詫びします。(私はORMでボトムアップアプローチを実際に使用しただけです)

于 2008-09-25T21:48:06.530 に答える
0

IDataReader は、既知のオブジェクトに何もマップしません。したがって、例は従来のクエリビルダーを使用して作成する必要があります。

于 2008-09-25T22:22:06.717 に答える