PetaPoco micro-ORMを使用しています。 ORMツールを使用してデータベースを操作することは確かに非常に簡単で安全ですが、私が嫌いなのは追加のコードだけです。私はほとんどのコードをデータベース自体に配置し、ストアドプロシージャ、トリガーなど、RDBMSのすべての機能を使用していました。
ストアドプロシージャ/トリガーでORMを使用しない場合、およびその逆の場合を知りたい。
ORM(オブジェクトリレーショナルマッピング)は、ストアドプロシージャと相互に排他的ではありません。ほとんどのORMは、ストアドプロシージャを利用できます。選択した場合、ほとんどのORMはストアドプロシージャを生成します。だから問題はどちらでもない。
ORMは(パフォーマンスの観点から)許容できないSQLを生成する可能性があり、そのSQLを手作りのSQLでオーバーライドしたい場合があります。これを実現する方法の1つは、SP(ストアドプロシージャ)を使用することです。
DotNetでは、次の場合はストアドプロシージャを使用しないでください。
ストアドプロシージャに慣れていない場合(ケースではなく、完全にするために含まれている場合)。
プロジェクトに複雑性と精巧さの層を導入したくない場合。
さまざまなデータベースで動作するアプリケーション、または複数のデータベースサーバー間でレプリケートする必要があるアプリケーションを作成しています(この最後の制限は一部のデータベースにのみ適用される場合があります)。
トリガーはORMと比較されないことに注意してください。トリガーは、アプリケーションコードに含めない方がよい機能を実行します(データベース間でのデータのロギングや同期など)。
セキュリティなどのさまざまな理由(SQLインジェクションを防止するためなど)と主張されている速度のために、コードではSQLよりもストアドプロシージャの使用を好む人もいます。ただし、これはやや議論の余地があり、詳細な議論が必要です。
ORMがストアドプロシージャを生成できず、大規模なシステムを作成する必要がある場合は、ケースに基づいて追加のコーディングの重み付けを行う必要があります。
ORM しばしば ORMを提供するデータベースが存在すると仮定します。しかし、通常、データベースは会社にサービスを提供するために存在し、複数の言語で記述された数百のアプリが存在する可能性があります。
ただし、ストアドプロシージャを呼び出せないORMを使用している場合は、「ORMとストアドプロシージャ」の場合のみです。それ以外の場合は、ビジネスロジックをコーディングする場所を決定する場合です。
ビジネスロジックをコーディングする場合は常に、データベースの一貫性のある状態から別の一貫性のある状態にデータベースを確実に変更する必要がありますどのアプリケーションが変更を行うかに関係なく。したがって、実際には2つの実用的な選択肢しかありません。データベースに1回コーディングするか、「不可解な」データアクセスレイヤーに1回コーディングするだけです。
「不可解な」DALを使用する場合は、dbmsコマンドラインインターフェイスに注意してください。