ASP.NETアプリケーションでのDALの自動生成
-
08-07-2019 - |
質問
ストアドプロシージャの場合、データアクセスレイヤーを自動生成する方法はありますか?これは、cssmithを使用してcsテンプレートを作成することで実現できることを理解していますが、無料/有料のソリューションがあるかどうか疑問に思っていました。
計画は、アーキテクチャが持つことです:
ASP.NETコードビハインド->ビジネスレイヤー->データアクセスレイヤー->ストアドプロシージャ。
BLレイヤーはDALへのパススルーとして機能し、自動生成することもできます。
あらゆるヒント/アドバイスは本当にありがたいです!
解決
Entity Frameworkは、ストアドプロシージャのスターターではありません。各ストアドプロシージャを機能させるには、手動で行う作業が多すぎます。ただし、.net 4 Entity Frameworkについて話すことはできません。
LINQ to SQLは非常にストアドプロシージャフレンドリーです。 / procsオプションを指定してSQLMETALを実行し、DALを自動生成します。
ただし、2つの制約:
- LINQ to SQLは、動的SQLを使用するストアドプロシージャを実行しません。
- LINQ to SQLは、一時テーブルからデータを返すストアドプロシージャも実行しません。
明らかな最初の理由は、LINQ to SQLがこれらのsprocに必要なメタデータを生成できないことですが、ストアドプロシージャの動的SQLはいずれにしても悪い習慣です。
他のヒント
Entity Frameworkを使用するだけです:
http://msdn.microsoft.com/en-us/library/bb399203。 aspx
Entity Frameworkにはまだ多くの癖があるため、Entity Frameworkを使用することはまだお勧めしません。 .NET 4.0が正式にリリースされると、Entity Framework 4.0が入手できます。そのリリースでは、おそらくNHibernateとLINQ to SQL(どちらも非常に異なる役割を持っています)を放棄し、LINQ to SQLの使いやすさとNHの柔軟性の両方を備えたEFを使用します。
現時点では、LINQ to SQLを使用することをお勧めします。これは、起動と実行が非常に簡単であり、ほとんどの場合は正常に機能するからです!
Linq2SQLまたはSubSonicはどちらもこの目的に適しています。
編集:Linq2Sqlは「死んでいる」と思われますが、現在の形式ではまだ非常に便利です。長期的な投資はしません。
エンティティフレームワークに対する別の投票。ただし、これはストアドプロシージャではなく、基になるテーブル構造に依存します。 Entity Frameworkがストアドプロシージャの出力に基づいてクラス構造を決定できるようにする方法を知りません。
私たちの最善のアプローチは、クラスとCRUDストアドプロシージャを手動でコーディングすることだと判断しました。多くはその解決策について議論しますが、私の経験では、ORMフレームワークを使用すると、特にフレームワークがブロックするストアドプロシージャを使用する能力を考慮して、最適ではないSQLが制限されます。
Clicheには理由があります。正しく実行したい場合は、自分で実行してください。アプリケーションに導入するサードパーティのコンポーネントが多いほど、直接制御できない問題を解決するように求めます。 Not-Invented-Hereシンドロームに登録するのは嫌いですが、これは有効だと思う1つのケースです。