質問
Hibernate は、すべての依存関係があるため、実際には私たちの環境には適していません。(城、log4netなど)
軽量で優れた代替手段はありますか?
Access/SQLite/VistaDB などの単純なファイルベースのデータベースのサポートは不可欠です。
理想的には、.NET アセンブリのみを参照する単一のアセンブリに含まれるもの。.NET Framework 2.0 または 3.0 のみが必要な場合は、それはおまけです。
解決
一般に、データベース バックエンドが .net で動作するには、ADO.Net プロバイダーが必要です。
MS Access (Jet) の場合、プロバイダーは .net に同梱されています。SQLite の場合は、自己完結型の ADO.Net プロバイダーがあります。
データ アクセス層ライブラリに関して、ADO.Net を抽象化したい場合は次のようにします。
- MS データ アクセス アプリケーション ブロック, 、 の一部 ms エンタープライズ ライブラリ.
iBatis.Net(だった 退職した 2010 年に Apache Foundation によって) MyBatis.net- ADOTテンプレート Spring Framework.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 は、正しく使用すれば、「Heave」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)を使用してみてください。