2016-07-07 11 views
2

現在、既存の内部ASP.NET Webフォームアプリケーションを書き直しています。私たちのアプリケーションは、データアクセスにEntity Framework 6を​​使用するWeb Apiバックエンドと、AngularJSを使用するフロントエンドで構成されています。既存のデータベースを使用する場合のEntity Frameworkに精通する

Code-First Existing Databaseメソッドを使用してEFモデルを作成した既存の大きなデータベースがあり、私たちはAPIメソッドへの入出力としてデータ転送オブジェクトクラスを使用しています。モデルクラス。だから、基本的に、私は同時にEF、Web Api、AngularJSに堪能しようとしています。ほとんどの場合、後者の2つはかなり快適ですが、EFのために私は完全に満足していません。私はMicrosoft Virtual Academyで多くのビデオを見てきましたが、実際に体験したのはこれが初めてのことです。

私たちは数ヶ月間このアプリケーションを開発してきましたが、単純なプロパティを持つフラットオブジェクトであるエンティティ(POCO DTO)でCRUD操作を行うだけでした。しかし、私たちは最終的に、クラスだけでなく、クラスそのものを扱う必要があるいくつかの状況に出くわしました。親子関係。

したがって、私は次のような質問があります。

  1. 私は仮想プロパティはEFで作成されていることを、私たちは私たちのDBで適切な外部キー関係を持っている場合ことがわかり、私が思い出すものから、サポートにあり遅延読み込み。しかし、Webサービス(Web API)を使用しているこの環境では、遅延ロードは実際には実現できません。私たちのオブジェクトモデルは、本当に必要なときに大量のデータが渡されることを意味する完全に人口が多いオブジェクトとその子どもが本当に大きなクラス階層を可能にするので、ほとんどの場合、第1レベルのオブジェクトはすべて必要。しかし、いくつかのケースでは、私たちは子クラスを実装したいので、私の質問はどうやってそれを行うのですか?それはどこで行うのですか?私は、DBコンテキストで自動的に生成されたコードを見てきましたが、私たちはまた、コントローラを作成するために足場のコードを使用しました。私たちはこれをどこで行う必要がありますか?私はこれに対してどのようにしているかを示すコードサンプルを見てきましたが、このコードがどこにあるのか具体的には述べていません。それはコントローラの中にあるようですが、私は間違っている可能性があります。

  2. オブジェクトの2つ以上の階層構造を許可している場合、EFは自動的に操作(更新、削除など)を処理しますか?たとえば、 "Company"オブジェクトが"Customer"オブジェクトを削除し、 "Company"オブジェクトを削除すると、関連する "Customer"オブジェクトも削除されますか?また、トランザクション内で自動的に実行されるような複数ステップの操作ですか、それとも明示的に設定する必要がありますか?

  3. モデルクラスまたはDBコンテキストを変更すると、このコードが自動的に生成されるため、変更が上書きされる可能性があるため、一般的に悪い習慣です。コントローラコードは、変更。私はデータベースの移行を認識していますが、私はそれらの経験はありません。私たちのデータベースはEFが必要とするすべての外部キーの関係を持っていない可能性があるため、ある時点で使用する必要があると確信しています。現時点で必要です。

私は、これは長い記事ですけど、誰もがこれらの事のいくつかを行う方法についていくつかのガイダンスを与えることができれば、それは私にそれがこれに対処することだが、私は私のチームに2人の他の開発者が持っていないだけだから誰がこのプロジェクトに取り組んでいるのですか?他の人たちと同じように、私たちはこれまで経験していない人です。Webサービスを介してデータを送信するために感謝

答えて

0
  1. は、私はあなたが送信したいデータを保持するためにDTOを作成し、その代わりにエンティティ自体を送信しようとしているのDTOにあなたのエンティティをマッピングすることをお勧めしたいですあなたのペイロード。また、エンティティの変更からAPIを保護します。

  2. カスケード削除は設定可能ですが、iircはデフォルト設定を100%確信していません。トランザクションは一般的に暗黙的なものではないため、必要な場所でトランザクションを使用したいと考えています。

  3. あなたがここで何を求めているのか正確にはわかりません。一般的に、エンティティ/テーブルの変更方法は、データベースを最初に使用するのか、コードを先に使用するのかによって異なります。データベースを最初に使用している場合(スキーマに一致するモデルを持つ.edmxファイルがソリューション内にあります)、SQLを直接更新して.edmxを使用してエンティティモデルを更新するだけです。コードファーストを使用する場合は、エンティティをどのように変更してデータベース移行を実行し、データベースを更新して一致させるかを指定します。

コード、最初の移行についてのMSDNの記事:https://msdn.microsoft.com/en-us/data/jj591621.aspx

+0

を我々はすでに#1をやっています。これにより、必要に応じてデータを変換する柔軟性も得られますが、今は本質的にモデルクラスのクローン(より適切なプロパティ名を使用しています)です。 #3はedmxファイルがありません。新しいADOデータモデルを追加し、データベースからコードファーストを選択することによってモデルクラスを作成しました。なぜ私たちはデータベースからEFモデルを使用しないのかを思い出させることができません(私たちの上司がデータベースからコードファーストを推薦したと思います)。 – DesertFoxAZ

関連する問題