4

まず私はこの記事を参照したい:MVCアプリケーションにEntity Frameworkデータモデルを配置する場所は?具体的な例

Where to put Entity Framework Data Model in MVC application?

マイEDMXはそれで7-10のテーブルを持っています。それ以上はない。

問題は、4つのテーブルから作業する私のモデルを構築する必要があるということです。 私は自分自身に尋ねています。これらのテーブルは実際のモデル表現であり、edmxファイルを "Models"フォルダに置くことは正しいでしょうか、このモデルのCONTAINERの名前はどうすればいいですか?

また、新しいプロジェクトを作成するのに十分な10個のテーブルがありますか?プロジェクトに電話するには? 。データアクセス?そこにedmxファイルの名前を付けるには?

私はMVCとEFで多くの経験をしておらず、そこでベストプラクティスを見つけようとしています。

更新Thisポストは、モデルのフォルダに入れていない私に語った:「モデルは、可能な限り、バックエンドのデータストア技術からデカップリングする必要があります。」

答えて

4

個人的に私のMVCプロジェクト(サイズに関係なく)が最小として次のものから構成されます

  • データ
  • ロジック
  • サイト

この構造はかなりよくとして動作しているようですビジネスロジックをストレージと表示から分離します。

EDMXをモデルフォルダに配置することは、ビューモデル用に予約されているからです。ベストプラクティスでは、ビューモデルをストレージエンティティから完全に切り離す必要があります。

EDMXに名前を付けるのは、通常、プロジェクトの短い名前の後に名前を付けます。モデルが正しい名前空間の場所に置かれるように、EDMXの名前空間を取得することが重要です。

+0

正しい名前空間の場所を意味しますか?私がEDMXを完全に切断したいのであれば、これは別個のプロジェクトを意味すると仮定します。だから私はこのプロジェクトをAppName.DataAccessと呼んでいます。したがって、EDMXエンティティはAppName.DataAccess.Entitiesのようなものになります。 – timmkrause

+0

どういうことかというと、EDMXの名前空間がAppName.DataAccessのどこかにマップされていることを確認する必要があります。それ以外の場合は、あまり意味がありません。 –

+2

データ、ロジック、およびサイトをもっと深く説明できますか?私は3層Webフォームプロジェクト(DataAccess、BusinessObjects、WebApp)から来ています。 「サイト」は実際のMVCプロジェクトですか?そして、これらの別々のプロジェクトはすべてありましたか? – timmkrause

1

私の回答はSilverlightに基づいています。私はMVCの視点から質問しているため、少しの文脈からは分かりません。しかし、私は私のEDMX

まずプロジェクトソリューション

-Widgetsをどこに置いたか私が説明することを許可してください。これらは複数のXAMLページで複数のUIプロジェクトです

-UIロジックは、一つのメインユーザーインターフェース内のすべてのウィジェットとXAMLページ

-View-モデル重い編成です。これらはMVCのコントローラとほぼ同等です。私はXAMLを使用してView-Modelsに直接バインドします。例QuotationItemModel.vbとxyz.vbなど。複数のXAMLページが1つのVMを共有することがあります。

-XAMLページは、ビューモデルの実装ごとにコマンドバインディングを使用すると仮定します。ボタンのクリック例がVMにルーティングされます。私はこれを達成できませんでした。なぜなら、UI調整ロジック(別のUIアーキテクト)が私のコマンドを委任することに干渉していたからです。 (CanExecute、Execute Func(Of Object、Boolean)ウィジェットのクリックイベント。)

-モデル。ここには1つの機能しかありません。彼女の仕事は、デリゲートをWebサービスの非同期コール完了イベントにフックし、その後Webサービスをトリガーします。 Deletegateの実装は実際にView-Model、つまりModel内ではなくQuotationItemModel.vbに戻ります。 Model.vbには1つの関数しかありません

- Modelには他のロジックはありません。すなわちModel.vbはエンドポイント、httpバインディング、WCFスタッフを決定します

- このソリューションではEDMXはありません。モデルはデータベースについても何も知らない。

第プロジェクト(ただし、第三の溶液内)

  • WCF実装。軽量。再び1つの機能。操作契約のみ。

  • コードはビジネスオブジェクトを3番目のプロジェクトに渡します。

  • EDMXの接続文字列がここで設定され、3番目のプロジェクトに渡されます。

  • 他のロジックはありません。ロジックを委譲し、簡単な工場ロジックと

    -Beginsは非常になったクラス

    を呼び出すための簡単な工場と

サードプロジェクトソリューション

-Begins一切EDMXのない意識がありません

  • 重いバックエンド。メンテナンスの問題を軽減するためにデザインパターンを使用します。ここから、パターンが

    などなどのコマンド、戦略、または抽象型との間のクロス十字可能性-The EDMX設計は

    - ビジネスオブジェクトはEDMX

    で論理的な方法で相互作用するこの層に完全には明らかです - LINQ to Entityまたはここでパラメータ化クエリを実行します

    - このレイヤは、請求トランザクションが発行される前にUnderwriting IDなどのビジネスロジックで構成されている必要があります。または、サーバーの日付に基づく見積の実行番号シーケンス。

    - ビジネスオブジェクトのエンティティへの手動マッピングがあります。潜在的に面倒ではなく、常に

    -resultは、3層アーキテクチャのための準備を生産、バックXML

    3番目のプロジェクトは非常によく、間に他の軽量なWebサービスとソリューションを分離することができたとして渡されます。それから私はこの純粋な層で自分自身の接続文字列をEDMXに生成します。しかし、私のところは今や「2.5」レイヤー2アーキテクチャに似ています。私は慎重に中間層のWeb設定で接続文字列を公開します。 アーキテクチャとは、別のハードウェアプラットフォームを完全に持つことを意味します。層は、問題空間、すなわちUI、通信およびビジネスドメインにおけるドメイン駆動設計の分離である。技術的に言えば、(EDMXを超えて)SQL Serverのデータベースは、別のアーキテクチャ、すなわち、Windows Azure

    ここには賛否両論があります。静かに批判を持って来てください、私は層を作ることに新しいです、本当に。

    短所 データコントラクトが公開されていないと、ビジネスオブジェクトおよび契約の言語で通信するときにUIがブラインドになります。これまでは、EDMXをWCFレイヤーにすることで簡単に実現できました。 共有ビジネスオブジェクトを表すためにXelementを使用しました。しかし、私はまだデータベース内部を公開せずにデータコントラクトを公開する方法を見つけ出す必要があります。現在、私は自分のXelementsのデータベースフィールドを知り、コード化しています。

    潜在的には、EDMXをバックエンドにするための静かなバインディングに似ています。沈黙は悪いことがあります。なぜなら、データがない列を取得した場合、疑わしい原因がたくさんあるからです。 XML結果からの良好なエラーメッセージによって解決できないものは、何も返されません。私の想像力を使って。

    バージョン管理のための弱いメカニズム。新しいクライアントは、既存のクライアントがBackend-Ver 1.0を利用している間に、Backend-Ver 2.0へのサイレントリダイレクトのための別個の運用契約と相互作用するかもしれません。これにより、古いデータベースと新しいデータベースそれぞれに2つのEDMXがあるはずです。

    Pros エクストリームデカップリング。私はEDMXを削除/再構築することができ、UIとWCFはまだコンパイルされます。私の3番目の解決策では、この極端なテスト作業でコンパイルエラーが発生します。

    Silverlight UIから、Microsoft Report Viewerレポートへのトリガーと通信は、UIから呼び出されたのとまったく同じクラスを共有します。 「レポート用の追加のWebサービス機能」はまったくありません。 UIで要求されたEDMX +ロジックは、レポートではまったく同じものですが、選択しない限り PS:Silverlightはクエリ文字列を使用してフィルタ条件をレポートに通知します。

    レポートには、再度EDMXが認識されていません。たとえば、バックエンドからEDMXを削除してから、レポートプロジェクトからデータ接続を更新すると、問題なくレポートプロジェクトがコンパイルされます。

    複数のアーキテクチャに移行する準備ができています。季節的な負荷分散、顧客基盤の拡大などがアーキテクチャへのこの投資を引き起こす可能性があります。

    ビジネスロジックの再利用性。たとえば、上司がSilverlightに疲れたら、UIビジネスオブジェクトをJSONに再コーディングするだけです。新しい要件を除いて、ビジネスロジックには何の変更もありません。例:生命保険に拡張して、現在Silverlightでコード化されているモジュールである既存の一般保険と共存させる。生命保険をHTML 5で想像しても、同じバックエンドと共存しています。両方のフロントエンドがEDMXを意識していないからです。私は、新技術の中からデータ契約を構築することに集中するだけです。

    予期せぬ(実際にレイヤリングするのは初めてです)副作用です。私は潜在的にUIとは別にバックエンドをテストすることができます。 LINQ to Entity(そのEDMX)を操作します。ユニットテストのためにクール。

    バージョン管理に関する問題を除いて、ビジネスロジックを更新しても、IIS(中間層)に新しい展開は行われません。

    はとにかくここのために有能なソフトウェアアーキテクトセレナ・ヨー

    階層化アーキテクチャサンプルからレイヤードアプリケーションソリューションガイダンスです。NET

    http://layersample.codeplex.com/

    http://layerguidance.codeplex.com/

    あなたがダウンロードサンプル、EDMXが生活し、睡眠共通のバックエンド、以上のさまざまな技術を介して複数のUIを持つの創意工夫でお知らせ。さらに、必要に応じて選択的に呼び出されるWindowsワークフローの基盤を超えています。 SerenaがEDMXをどこに置いたかを確認することができ、実行可能なコードで実行できます。純粋な至福。