2

これは、私が有用なものを見つけることができなかったシナリオです。多分私はこの方法でそれを行うことを考えている最初の人です:

アプローチ:データベース ファースト

データベース: SQL Server 2008 R2

プロジェクト : DLL (データ アクセス)

データベースへのすべてのアクセスとビジネス機能をカプセル化するデータ アクセス ライブラリがあります。データベースには多くのテーブルがあり、すべてのテーブルには次の 2 つの列があります。

  • last_updated_on : smalldatetime
  • last_updated_by : nvarchar(50)

プロジェクトにはいくつかのモデル (または edmx ファイル) が含まれており、これらのモデルには、それらが表すテーブルにマップされている関連エンティティのみが含まれています。各テーブルには last_updated_* の列が含まれているため、次のようなモデルの 1 つに複合型を作成しました。

複合型: 歴史

  • By (文字列: last_updated_by )
  • オン (DateTime: last_updated_on )

問題は、それを定義したモデルでしか使用できないことです。

A) 他のモデルで使用しようとすると、デザイナーに表示されません B) 他のモデルで定義すると、履歴が既に定義されているというエラーが表示されます

あるモデルで定義された History 複合型を他のモデルで再利用できるようにするための解決策はありますか?

4

1 に答える 1

0

私はほぼ同じことをしようとしていました (私の DB フィールドは "created"、"creatorId"、"modified"、"modifierId" であり、複雑なタイプの RecordHistory にまとめられています)、答えを見つける前にこの質問に遭遇しました。 ..

http://msdn.microsoft.com/en-us/data/jj680147#Mappingはソリューションの概要を示していますが、かなり単純なので、ここでも基本を説明します。

  1. 最初に複合型を作成します (.edmx デザイナーでフィールドを選択し、右クリックして [新しい複合型にリファクタリング] を選択します)。

  2. .edmx デザイナー (モデル ブラウザーではない) で、同じ共通の列を持つ別のテーブル/エンティティを右クリックし、[追加] -> [複合プロパティ] を選択します。

  3. 新しいプロパティには、複合型が自動的に割り当てられます。複数の複合タイプがある場合は、新しいプロパティのプロパティを編集し、タイプを適切に設定します

  4. (モデル ブラウザまたはデザイナで) テーブル/エンティティを再度右クリックし、[テーブル マッピング] を選択します。

  5. 各共通フィールドの値/プロパティ列を更新します (私の場合は、「変更された: DateTime」から「history.modified: DateTime」に変更します)。

  6. エンティティから古い共通フィールドを削除し、複合型だけをその場所に残します

于 2013-05-22T19:48:25.787 に答える