次の方法で共有


この記事は機械翻訳されたものです。

データ ポイント

Entity Framework Designer が Visual Studio 2012 で評価される (機械翻訳)

Julie Lerman

 

Julie Lerman認めなければならない私はエンティティ フレームワークを使用することができますドメイン モデルを構築するコードの最初の使用に非常に夢中にしてきた。 多くの Entity Framework デザイナーを介して、データベース最初またはモデル最初のいずれかのモデルを使用してをビルドすることができます、EDMX モデルに注意を払ってきました。 (私の 2011 年 5 月のコラムを参照してください"徹底分析エンティティ フレームワーク戦略。モデル作成ワークフロー」msdn.microsoft.com/magazine/hh148150、最初のコード、最初のモデルとデータベースの最初の違いについて学ぶこと)。

しかし、デザイナーに住んでいたとき、帰り。 「私はそう古い」ジョークの準備は? 私はデザイナーがなかったので未加工の XML を使用していたときに、エンティティ フレームワークを使用するので、古いです。 嘘ではありません。 これは最初のリリースの前に初期のベータ版の中にあった。 だからデザイナーを Visual Studio 2008 で来た主要な祝福でした。 常にそれがより良い... またはどのようなことがないについて不平を言う方法を見つけるは簡単ですが、マイクロソフトは素晴らしい仕事をしました。 Visual Studio 2010 では、モデルの最初のサポートと多元化と外国のキーのサポートなどのデザイナーのいくつかの他の素晴らしい特徴を得た。

今、Visual Studio の 2012年以上に高められたデザイナーをもたらします。 多くの微調整だけ楽にし、私の顔に笑顔をもたらす 2 つの大きな変更があります — あなたにうまくいけば、あまりにも。

1、2、3、色 !

あなたは既に 1 つの顕著な改善について聞いたことがあります — エンティティ デザイナーに色を追加する機能。 それを使用する非常にシンプルな機能です。 1 つまたは複数のエンティティを選択してに示すように、プロパティ ウィンドウでは、色をそれらのエンティティを選択することができます図 1。 色エンティティを視覚的にタグ付けのために大きい。 モデルを開くときに、特定のエンティティ モデル内の 1 つの別を関連付けるを参照してくださいすることは非常に簡単です。 小型のモデルのようにも図 2、それはこれがすることができます便利な明確な方法です。

Changing the Color of Entities
図 1 エンティティの色を変更します。

Easily Visualize Entity Groupings with Color
図 2 は、簡単にカラーとエンティティ グループを視覚化します。

図を整理します。

上の討論怒りについて多くのエンティティ モデルの多すぎるです。 私の脳の以上 20 または 30 について、単一のモデル内のエンティティは視覚的にも肉体的にも管理しやすいです。 それは両方の視覚的にすべての情報を同時に取るは難しいで、1 つ以上のエンティティ デザイナーで作業したい場合は、面倒なことを意味します。 多くの場合、デザイナーのモデル私、デザイン サーフェイス上のエンティティを見つけるためにブラウザーにリゾートだけです。 巨大なモデル (エンティティの数百と — 何か私はちょうど今まで試みることはない)、デザイン時および実行時のパフォーマンスが発生する問題。 (で Microsoft データ デベロッパー センターのトピックは、「エンティティ フレームワーク 5 のパフォーマンスに関する考慮事項」を参照してください bit.ly/OZTiUL.)大規模モデルの処理に異なるアプローチをこの問題を克服するサード パーティ EDMX デザイナーです。 私の好みは私のアプリの全体で使用するための小さなモデルを作成するが、常にオプションではないです。 デザイナーで 1 つのモデルの多くのエンティティを管理する能力を持つことが重要です。

新しいデザイナーはしばしば要求された機能を提供することによってこの問題に開発者に役立ちます — 図。 モデル図のモデルでは何のさまざまなデザイン時のビューを作成できます。 1 つなど、モデル全体が表示されます 1 つのビューを持っている必要があります図 2、し、追加のダイアグラムを使用して、エンティティをグループ化する別の方法を表します。 デザイナー ダイアグラムを作成するためのアプローチの数を提供しますがしますエンティティなく移動複製の機能を注意してください。

たとえば、私は、デザイン時に顧客管理を中心にしたとき必要がありますエンティティのみを提示図を必要があります。 それはこの特定のモデルで顧客と ShippingAddresses があります。 これを達成することができますいくつかの方法があります。 1 つは、これらのエンティティを選択し、それらを右クリックし、コンテキスト メニューの [新しいダイアグラム オプションに移動です。 これで示すようにそれら 2 つのエンティティにのみ新しいダイアグラムが作成されます図 3。 しかし、Move オプションを使用するため、これら 2 つのエンティティをメインのダイアグラムから削除されます。 モデル全体の単一の図表を保持する場合は注意する必要があります。 にもかかわらず、その特定の図の注文エンティティが表示されていないナビゲーション プロパティ (たとえば、Customer.Orders) を参照してくださいすることができることの図は、モデル スキーマの反射ではないのような。

Diagram Created Using the Move to New Diagram Feature
新しいダイアグラム機能を移動を使用して作成された図 3 のダイアグラム

作成してダイアグラムを通じて、デザイナーのモデル ブラウザーの表示を管理することもできます図 4。 モデル ブラウザーから表示、追加、ダイアグラムを削除する図を選択できます。 モデルからエンティティをドラッグすることもできます (たとえば、会社のエンティティの種類セクションで­DatabaseModel) ダイアグラム サーフェイス。 だから私は顧客、ShippingAddress に図 1 のままにしたい場合は、私をモデル ブラウザーから新しい図を作成、顧客、ShippingAddress サーフェイスにドラッグします。

Manage Diagrams from the Model Browser
図 4 は、モデル ブラウザーから図を管理します。

また、1 つのダイアグラムから別のエンティティを貼り付けるをコピーして、任意の関連する団体も一緒に来る。

ダイアグラム デザイン時ビューであることに思いを留めてください — 彼らは、モデルを完全に定義していません。 モデル ブラウザーで完全なモデルを常に見ることができます。 したがって、1 つのダイアグラムから別のエンティティの重複モデルやアプリケーションに影響はありません。 しかし、彼らは読み取り専用のビューではありません。 まだモデルを設計することができます、基になるモデル エンティティでこれらのダイアグラムとそれらの変更に影響を与えます。 ダイアグラム内の任意のエンティティとそのエンティティを右クリックし、直接関連しているすべてのエンティティにプル「関連を含める」オプションを選択することも。

既定のコード生成:Poco、DbContext

私に最初にそれを発見するとき微笑した別の変化は、既定では、エンティティ フレームワーク 5 DbContext T4 テンプレート今新しいエンティティ データ モデルを作成するウィザードを使用すること、です。 エンティティ フレームワーク 4.1 (これは最初のコードと、dbcontext クラスの API に含まれる) のリリース以来、EF チーム開発者 EntityObject を継承するクラスと .NET 4 ObjectContext なく、DbContext および平野の古い CLR オブジェクト (POCO) クラスに新しいプロジェクトを開始することを推奨しています。 しかし、Visual Studio 2010 は、ObjectContext とエンティティにデフォルト コード生成テンプレートを使用する­オブジェクト。 それは EntityFramework.dll NuGet パッケージをインストールして、dbcontext クラス テンプレートを使用するには、彼ら EDMX スイッチへの開発者までだった。 これは、新しいガイダンスとそれに関する法律を認識する必要がある意味。

今、デザイナーのデフォルトは、5.x dbcontext クラス ジェネレーターの EF テンプレートを使用して、以前のタイプよりもあなたのアプリケーションで使用するが非常に簡単 Poco DbContext クラスを作成します。 ウィザードはインターネット接続も必要はありませんので、Visual Studio の 2012 年、と共にコンピューターにインストールされている EntityFramework.dll への参照にもプルします。

ObjectContext の使用に簡単に戻すことができます。 Microsoft データ プラットフォーム デベロッパー センターのトピックは、「元に戻すバックに ObjectContext コード生成,」でチェック bit.ly/OFjcLa

列挙型を定義します。

Microsoft .NET Framework 4.5 エンティティ フレームワークに列挙型のサポートをもたらします。 EDMX と最初のコードは、列挙型を使用できます。 EDMX と Entity Framework それらはデータベースの種類にマップするためにそれらを変換する方法を知っているので、モデルに列挙型の認識させる必要があります。 Entity Framework デザイナー、このかなり簡単に行うことができます。

場合は、リバース エンジニア リング ウィザード、EDMX モデルにデータベース データベース列 .NET 型として解釈されます。 [Enum の種類を定義し、プロパティを修正する必要があります。 ここではそのプロセスを簡単に見て。

私のモデルのリターンのエンティティを整数にマップする理由という名前のプロパティがあります。 余分なデータベース テーブルとエンティティを持つとしてのではなく、enum の理由を表すしたいし、デザイナーでこの変更を行うことができます。 デザイナーの背景を右クリックし、列挙型は、新しいアイテムのリストですに「新規追加」の下で表示されます。 列挙型のウィザード、私がやったように列挙型を定義することができますを得るために選択図 5。 列挙型が、デザイナー画面に表示されていないが、常にモデル ブラウザーで彼らに (表示、編集または削除するには) を得ることができます。

Defining an Enum Type
図 5 の列挙型を定義します。

今、モデルがこの列挙型の認識では、私のエンティティで使用できます。 私はリターンのエンティティに戻るし、Reason プロパティのプロパティを編集します。 型 Int32、もともと。 新しい列挙型型のドロップダウン リストで示すように現れる図 6、しかし、それを見つけるためにスクロールする必要があります。 一度型、エンティティ フレームワーク LINQ クエリの記述、データの取得またはデータを更新しているかどうか、データベースの値を列挙型を変換する方法を知っていることを選択しました。

Selecting a New Enum Type
図 6 新しい列挙型を選択します。

ここでは、ReturnReason 列挙型でフィルター処理する LINQ クエリの例です。

var returns = context.Returns.Where(
  r => r.Reason == ReturnReason.Broken).ToList();

データベースにクエリが実行されると、この TSQL のビットで示すように壊れた enum 3、その列挙型の値に変換されます。

    WHERE 3 =  CAST( [Extent1].[Reason] AS int)

属性フラグの設定と参照外部タイプのチェック ボックスに気づいたことがあります図 5。 EF に設定したり、データを照会するときの列挙型を組み合わせることができますビット単位の and の列挙型をサポートします。 フラグの設定、enum ビット単位指定します。 パヴェル Kadluczka EF チームからの偉大なブログの記事、「エンティティ フレームワーク 5 でを使用して既存の列挙型」をしています (bit.ly/QIUz6y)、参照型の外部チェック ボックスの機能の詳細な説明を提供しています。

この文書の執筆時点では、WCF データ サービス 5 列挙型を認識しないこと、注意してください。 WCF データ サービスでこの問題についてもっと読むチームのブログで blogs.msdn.com/astoriateam

ストアド プロシージャのバッチのインポート

図 7 別の機能については長い間前に、質問を覚えているし、私はエンティティ データ モデル ウィザードで Visual Studio 2012 でそれを見るがかなり満足を示しています。 Visual Studio 2010 でデザイナーでストアド プロシージャを複合型にマップできますが、1 つのストアド プロシージャを同時に行うにしています。 その機能がまだ存在するが、なりましたショートカット。 データベースの最初のモデルを作成して、一度にすべてからのストアド プロシージャ、関数の作成ウィザードを持つことができますウィザードに関数にマップされます必要な複雑な型を作成します。

Creating Function Imports from Stored Procedures図 7 ストアド プロシージャからの関数インポートの作成

図 8 ショーの新しい関数インポートとその関連複合型モデル ブラウザーで。 私は通常ウィザードを作成既定名前を使用する好きではないです。 これらの資産を作成し、それら自身の 1 つを作成するよりも、名前を編集できるようにまだ高速です。

The New Function Imports図 8 新しい関数インポート

いくつかのストアド プロシージャからの関数インポートを作成するが、エンティティ マッピングを作成する場合 (挿入を使用­いつでも追加する新しい連絡先に連絡して SaveChanges を呼び出す) いくつか他の人から私は 2 つのパスでこれを行うをお勧めします。 最初のパスでは、関数とその関連の複雑な型としてインポートする必要がありますストアド プロシージャのみを選択します。 その後、更新モデル データベース機能からを使用して、マッピングを使用して、「インポートは、ストアド プロシージャ選択...」チェック ボックスをオンこの第 2 のパスでチェックされていないことを確認するプロシージャを選択できます。

TVF と地理のサポート

EF5 テーブル値関数 (Tvf) と (SqlGeography、SqlGeometry) などの空間データへのマッピングをサポートし、デザイナーはこれらの機能もサポートしています。 デザイナーを使用してこれらのマッピングは、Tvf と空間の型で、それぞれ、関連ウォークスルーを読んで活用する方法を見つけることができます bit.ly/QCppJJbit.ly/VdbEUP

列挙型のサポートとして、WCF データ サービス 5 EF5 モデルで定義することができます地理型をサポートしていないことに注意してください。

それはささいなことです。

デザイナーのスムーズな体験を使用することが大きなの全体的な影響を追加するより小さい改善に Entity Framework デザイナーのスルーです。

プロパティを移動 、あなたを好きな順序で記載されているので、デザイナーでエンティティのプロパティを再構成できます。 以前のバージョンでこれを達成する唯一の方法は、XML を直接編集することによってだった。

スキーマ内のテーブルの選択スキーマ名でを今組織データベース最初のモデルを作成または、データベースからモデルを更新すると、テーブル、ビュー、および他のデータベース オブジェクトです。 データベース オブジェクトをスキーマ別に編成のトラブルに行ってきた場合は、ここでオブジェクトをより簡単に検索できることで恩恵を受けるよ。 Dbo スキーマ テーブルのように、ドメインの一部でないオブジェクトを簡単に除去することができます図 9

Grouping Database Objects by Schema Name図 9 スキーマ名でデータベース オブジェクトをグループ化

列のファセット変更反映モデル更新で 、モデルを更新データベース ウィザードからは今列ファセットの変更を拾って — スケール、精度、MaxLength、Nullable、Unicode データバッファー —、モデル内の関連するプロパティに適用されます。 これは、多くの開発者のための歓迎の変更になります。 まだ列の種類にかかわらず変更した場合は、壊れたマッピングを修正する必要があります。 MSDN は「モデルの更新ウィザードによる .edmx ファイルを変更」ドキュメントで効果の完全な説明をしています (bit.ly/PTOwKB)。 この記事の執筆の時点では、列の変更を記述するセクションまだファセットについての新しい詳細は含まれません。

関連エンティティの選択で強調表示このモデルを視覚的に理解するを助けることができるもう一つの小さな魅惑です。デザイナーでエンティティを選択すると、関連するエンティティにも強調表示されます。

メモについてのリファクタリング アイテムのコンテキスト メニュー プレリリース バージョンの Visual Studio 2012 エンティティまたはプロパティの名前を変更した場合に依存するコードをリファクタリングするデザイナー機能含まれています。 機能は Visual Studio の 2012 年の最終的なリリースにそれを行っていないが、デザイナーでは、少し混乱するかもしれないいくつかのアーティファクトがあります。 コンテキスト メニューで名前の変更リファクタリング項目サブメニューにしています。 [リファクター] メニューから名前の変更を選択した場合、コードは変更しないことを示すウィンドウがポップアップします。 リファクタリングは起こらないので、そのウィンドウは決して何も一覧表示されます。

堅牢な改良

この記事は新機能 Entity Framework デザイナー Visual Studio 2012 に固有に集中している間は、見逃してはならない EF5 の他の拡張機能です。 最も注目すべきは、どのようにパフォーマンスを基になる、新しい Auto-Compiled クエリのおかげで改善されましたです。 あなたはこれについてチーム ブログの記事で読むことができます"スニーク プレビュー。エンティティ フレームワーク 5.0 のパフォーマンスの向上」(bit.ly/PLWu5l)。 Entity Framework デザイナーを使用するか、モデルを設計し、最初のコードを活用するモデルを構築しているかどうか、たくさん EF5 で興奮することです。

Julie Lerman は、バーモント ヒルズ在住の Microsoft MVP、.NET の指導者、およびコンサルタントです。世界中のユーザー グループやカンファレンスで、データ アクセスなどの Microsoft .NET トピックについてプレゼンテーションを行っています。彼女はブログで thedatafarm.com/blog 、「Entity Framework のプログラミング」の著者 (2010) コードの最初のエディション (2011) DbContext 版 (2012 年) だけでなく、オライリー メディアからすべてあり。Twitter ( twitter.com/julielerman、英語) で彼女をフォローしてください。

この記事のレビュー、次技術専門家のおかげで:ローレンス ・ ジョーンズ