0

MVC5 with EF6 DB First tutorialを読んだことがあります。このチュートリアルでは、コード(コントローラとビュー)を生成します。MVF 5でビジネスロジックをEF6で実装する方法

私は3つのプロジェクトVSで作成しました:

+ AdminWebSite 
+ PublicWebSite 
+ EntityFramework 

をそして私は質問、私はビジネスロジックを実装し、それを共有する必要があります複数のウェブサイト(管理&公開)をしましたか?

ビジネスロジックが含まれる:データベースと

  • ロジック(マルチテーブル付きすなわちトランザクション)
  • メールサーバー

EDITとSharePointの情報

  • ロジックとロジックを

    Typo、should be 3 proje 3つの解決策の代わりにctsを使用しますが、同様のケースである必要があります。AdminWebSiteおよびPublicWebSiteには、参考としてEntityFrameworkが追加されています。

    MVC3前EDIT 2

    、私はすべてのビジネス・ロジック、およびまた、リポジトリのクラスが含まれてクラスのプロジェクトを作成します。したがって、すべてWebSiteまたはWebServicesは同じビジネスロジックを使用できます(ただし、それはベストプラクティスではありません)。

    しかし、EF6でMVC5に移動すると、リポジトリと作業ユニットが消えてしまったようです。また、ビジネスロジックなしでCRUDを直接行うためのテーブルもありますが、すべてのテーブル用にリポジトリを実装する必要はありません。

    これは、Too broadです。

  • 答えて

    0

    はこれにで見てください: http://dombrovsky.github.io/EntityHooks/

    それはEF6で動作するように設計されたフレームワークのように見えます。レコードが挿入または更新されるときなど、特定のイベントが発生したときにカスタムビジネスロジックを記述できるようにする必要があります。

    +0

    ありがとうございますが、フックは_Code First_のために設計されていますが、私は 'Database First'を使用しています...ビジネスロジックとは関係のないデータベースアクションをフックします – Prisoner

    +0

    EntityHooksはビジネスロジックの例です実装されました。 Git Repoのコードを見れば、発生したイベントの周りにコードがどのように構築されているかが分かります。コードを使用する必要はありませんが、同じテクニック/パターンを使用してビジネスのカスタムロジックを実装することができます。いくつかの抽象化によって、顧客ごとに異なるかもしれない外部アセンブリにカスタムフックを格納することができます。 –

    0

    プロジェクトを解決することができます。

    私は通常、別のプロジェクト(クラスライブラリ/ DLL)にデータベースレイヤーを持ち、他のプロジェクトに参照させます。この方法では、データベースモデルの変更を簡素化するORM(Entity Framework)のコピーが1つしかありません。また、テーブルとストアドプロシージャを含む実際のスキーマ定義を保持するデータベースプロジェクト(SQLサーバーの場合)を作成します。これは、スキーマを変更して展開するための優れた方法です。

    コードのかなりの部分を再利用できる場合はいつでも、それをクラスライブラリにしてクライアントプロジェクトで参照することをお勧めします。

    +0

    あなたはそれについてもっと説明できますか?データベースプロジェクトはEntity Frameworkと同じでなければなりません。そして、どのプロジェクトをビジネスロジックを実装する必要がありますか? – Prisoner

    +0

    データベースプロジェクトはエンティティフレームワークプロジェクトではありません。 Visual Studioの新しいプロジェクトテンプレートから、SQL Serverプロジェクトと呼ばれる新しいタイプのプロジェクトを作成できます。それは、実際のSQLサーバーデータベースの中に入るものを格納します。テーブル、ストアドプロシージャ、その他のSQLレベルのリソースなどがあります。私は、SQLリソースのバージョン管理、スキーマの比較(例えば、本番とローカルの間)、および移行を適用するためにこのプロジェクトを使用することは非常に便利です。 –

    +0

    ビジネスロジックは、コントローラレイヤー、Entityフレームワークモデルプロジェクト内のモデルレイヤー(私の答えで言及した)、またはSQLストアードプロシージャーのいずれかに行くことができます。私の経験に基づいて、ストアドプロシージャにロジックを持たせることで、ビジネスロジックの管理がより簡単になります(ロジックが長すぎない場合はパフォーマンスが向上します)。 –

    0

    一つの解決策Webプロジェクト、BLLプロジェクト、DALのプロジェクトを含め、Webプロジェクトは、私がEntityFrameworkという名前のプロジェクトを持っていないパブリッシュおよび管理

    0

    含まれている、私はあなたがインフラストラクチャという名前のプロジェクトにこのプロジェクトを交換することをお勧めします。このインフラストラクチャプロジェクトには、EmailSendersやEntityFrameworkクラスなどのDALクラスなどの外部ソースに依存するクラスや、今後何らかの理由で他の外部サービスと置き換えたいことがあるクラスが含まれます。

    ビジネスロジックは、コアプロジェクトに保存する必要があります。このコアプロジェクトは、Webプロジェクトまたはインフラストラクチャプロジェクトのいずれも参照しません(ただし、Webプロジェクトは、インフラストラクチャとコアプロジェクトの両方を参照します)。コアプロジェクトにEmailSenderが必要な場合は、IEmailSenderのようなインターフェイスも参照します。これはコアにもあります。

    これは基本的に私が示唆している構造である:

    • AdminWebSite
    • PublicWebSite
    • インフラ
      • EF
      • ログイン
      • メッセージ
      • SharePoinトン
    • コア
    • テスト(このプロジェクトは、すべてのあなたのユニットテストと統合テストが含まれています)

    私は本当にあなたが依存性の注入を使用して上に読むことをお勧めします。 DIを理解すると、コアとインフラストラクチャの分離が理にかなっており、ハードリファレンスがなくても相互にどのように使用できるかがわかります。

    UoWまたはリポジトリを使用したくない場合は、EFをコアに移行することをお勧めしますが、インフラストラクチャプロジェクトは他の外部サービスに対しても非常に有効です。

    関連する問題