質問

Hibernate は、すべての依存関係があるため、実際には私たちの環境には適していません。(城、log4netなど)

軽量で優れた代替手段はありますか?

Access/SQLite/VistaDB などの単純なファイルベースのデータベースのサポートは不可欠です。

理想的には、.NET アセンブリのみを参照する単一のアセンブリに含まれるもの。.NET Framework 2.0 または 3.0 のみが必要な場合は、それはおまけです。

役に立ちましたか?

解決

一般に、データベース バックエンドが .net で動作するには、ADO.Net プロバイダーが必要です。

MS Access (Jet) の場合、プロバイダーは .net に同梱されています。SQLite の場合は、自己完結型の ADO.Net プロバイダーがあります。

データ アクセス層ライブラリに関して、ADO.Net を抽象化したい場合は次のようにします。

これらはすべて、フレームワーク 2.0 以降で適切に機能します。

基本的に、 あなた 選択してください(選択肢はたくさんあります)

他のヒント

大規模 - https://github.com/robconery/massive

または

ペタポコ - https://github.com/toptensoftware/petapoco

どちらも単一の .cs ファイルであり、GAC に含まれるもの以外には依存関係はありません。

(完全公開、ペタポコは私が書いたものです)

パフォーマンスが良く、アセンブリが 1 つだけ必要な軽量の ORM を試してみてはいかがでしょうか 光速 マインドスケープより。これはオープンソースではありませんが、ソースは入手可能で、価格も手頃です。十分に採用されていないほとんどの ORM のリスクは、もちろん品質とサポートのレベルです。また、 には、気にする価値のある他のオープンソース ORM はほとんどありません。現在のネットスペース。

NHibernate の依存関係が嫌いなため、ロギング フレームワークや Castle プロジェクトのファセットは必要ないようですね。IoC、モノレールなどNHibernate の最低限の要件 (log4net と Iesi コレクション、および Castle プロジェクトからの動的プロキシ) を取得し、それらに対して ILMerge を実行してそれらを 1 つのアセンブリに統合することを検討したことがありますか。少しいじる必要があるかもしれません。しかし、それはそれほど難しいことではありません - あるいは、これらの各プロジェクトのソース コードを、組織のために維持している NHibernate のカスタム ビルドに取り込み、プロジェクト/組織で必要のない機能を削除することもできます - それはそれほど難しくなく、難しくありません当然のことですが、私はあるプロジェクトで、ORM のメリットを享受したいが、配布されるファイル/インストーラーのサイズを削減する必要がある場合に、これらの方針に沿った処理を実行しました。

また、Nhibernate ベースのソリューションについて「重すぎる」と感じていることを説明できますか...私の経験では、他のフレームワークと比較してかなり軽量な ORM フレームワークです。

このリストに加えて、以下もご覧ください。 粋な (StackOverflow 自体のために作成され、StackOverflow 自体によって使用されます)。

いくつかの代替案:
- アクティブレコード - バックグラウンドで nhibernate.dll を使用しますが、設定は属性を通じて行われます。nhibernate のライト版のようなものです
- 亜音速
- CoolStorage.NET - 小規模なプロジェクトでよく使用しました。データベースの数に応じてうまく機能します

ここにあります 大きなリスト 代替案のうち、私がお勧めするものは次のとおりです。

  • クールストレージ
  • スーダ
  • ODX
  • Lightspeed (オブジェクトが 8 つ以下の場合は無料)

この4つが一番軽いです。Subsonic、ActiveRecord などは大規模システムを対象としています。これらは小規模なシステムでは問題なく動作しますが、(少なくとも ActiveRecord の場合は)依存関係の膨大なリストが付属しており、小規模なシステムには過剰です。私は Lightspeed を選択し、8 オブジェクト以下のものは小規模なシステムだと言います。広く採用されている NHibernate を単純に使用するのは、スケーリングには適していますが、短期的には意味がありません。ORM とコンシューマーの間にレイヤーがあると機能します。とにかくその辺で。

LINQ to SQL は、正しく使用すれば、「He​​ave」ORM システムの優れた代替手段となる可能性があります。

完全に機能する ORM は必要なく、ADO.NET 上のデータベースに依存しない高速なデータ レイヤーだけが必要な場合は、オープンソースを試してみてください。 NI.データライブラリ(V2). 。これは非常に軽量で (小さなアセンブリが 1 つだけで、他の依存関係はありません)、すべての標準データ層インフラストラクチャを提供します。

  • 'relex' と呼ばれるクエリ抽象化とその文字列表現のパーサー (次のようになります:"books(評価=5)[タイトル,id]" - Linq-to-SQL に代わる非常に優れた代替品であり、その場で式を作成できます)
  • 複雑な DB 構文に依存する SQL クエリをカプセル化するための「ビュー」の概念
  • データトリガー
  • 選択/更新/削除クエリに対するデータ レイヤーのアクセス許可
  • すぐに MS SQL、SQLite、MySQL、Odbc/OleDb プロバイダー (MS Access) をサポートします。他の SQL データベースのサポートは簡単に追加できます。

そのメイン コンポーネント (DALC) は、次の 1 行のコードで初期化されます。

var dalc = new DbDalc(new SqlClientDalcFactory(), connectionStr);

それだけです。.NET 2.0ランタイムのサポートが必要な場合は、最新のV2バージョンを2.0ランタイムでコンパイルするか、以前のレガシーバージョン(NI.Data.Dalc、V1)を使用してみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top