2

現在、SQLServer2008のデータ構造に基づいて複雑なエンティティ関係を設定しています。

私がやろうとしていることはばかばかしいほど単純だと思いますが、私は髪を抜いていて、それを理解しようと何日も費やしてきました。

addressTypeIDで結合されたAddressテーブルとAddressTypeテーブルがあります。AddressTypeには、「Billing」と「Shipping」の2つがあります。請求と配送の両方のカスタムエンティティを作成できるようにしたいと思います。Addressエンティティから継承し、それに条件を追加して正しいタイプを取得できると思っていたのですが、それほど単純ではありません。

必要に応じて既存のエンティティに飛び込むことができるように、これらの既存のエンティティからナビゲーションプロパティまたはフィールドを削除したくありません。

目標は、証明書の基準に基づいて他のエンティティのフィールドを含むカスタムエンティティを作成することです...ビューがSQLサーバーに対して行うのとほぼ同じです。文字通り、私がインターネットで見つけたすべての例は、これを行う方法について明確ではありません。

私が今持っているのは、コンクリートタイプごとのテーブルです(私は信じています)。私がこれをやろうとするたびに、私は物事がマップされていないなどと私に怒鳴ります...そして私はそれらをマップしてから新しいエラーメッセージを受け取ります。明確な良い教訓はありますか?モデルを再構築するとssdlなどが上書きされるため、ssdlなどに飛び込むのはやめたほうがいいです。

遅延読み込みが無効になっています...それが私が望む方法です。

新しいエンティティを作成し、フィールドをコピーして貼り付け、テーブルマッピングを設定できないのはなぜですか?BillingAddressという新しいエンティティを作成し、Addressからフィールドをコピーして、テーブルマッピングを設定しました。エラーが発生します。

エラー297エラー3033:4525行目から始まるフラグメントのマッピングの問題:EntitySets'BillingAddresses'と'Addresses'は両方ともテーブル'Address'にマッピングされています。それらの主キーが衝突する可能性があります。

また、アドレステーブルから継承しようとしました...エラー:[アドレスの設定]ですべてのタイプのマッピングを指定する必要があります

4

2 に答える 2

3

あなたのスキーマを正しく理解していれば、特定のレコードが表すAddressの種類を定義Addressする識別子列 を持つテーブルがあります。単一のテーブルには、請求先住所と配送先住所の両方のタイプのレコードが含まれています。この場合、クラス階層ごとに 1 つのテーブルがあるため、実際には Table-Per-Hierarchy (TPH) 構造になります。addressTypeIDAddress

あなたは、Table-Per-Concrete-type (TPC) 構造を持っていると思っていたと言いました。その場合、TPC では具象型ごとに 1 つのテーブルShippingAddressがあるため、データベースにはとテーブルの両方が必要になります。BillingAddress

次のようなコード構造が必要です。

public abstract class Address
{
    // Common address properties
}

public class ShippingAddress: Address
{
    // Additional shipping-address specific properties
}

public class BillingAddress: Address
{
    // Additional billing-address specific properties
}

ShippingAddress次に、およびタイプのクラス階層を、列で識別されたBillingAddress単一のテーブルの TPH マッピングとしてマッピングする必要があります。AddressType 列は、AddressType 名または代理キーでマップする場合を除き、マッピングで役割を果たしません。その場合、適切な Address テーブルと AddressType テーブルの結合ビューを表示するビューがベース TPH スキーマ ソースになり、識別子列は AddressType テーブルから含まれる代理キー列になります。AddressaddressTypeID

于 2010-06-29T03:51:00.123 に答える
0

実際には、階層ごとのテーブル、または概念モデルの水平分割のように聞こえます。サポートされているアーキテクチャに関する (かなり不十分な) ドキュメントについては、この MSDN ページを参照してください。

そのリンクが十分に役に立たない場合は、正確なテーブル定義と目的のエンティティ デザイン (クラスとプロパティ) を投稿してください。

于 2010-06-28T22:35:59.467 に答える