0

私は3つのテーブルを持っています。名前:Merchants、MerchantNumberX、Numbers(数字は他の多くのエンティティで使用されています-これはほんの一例です)。

Merchantsテーブルは次のようになります。

MerchantGuid, MerchantName

Numbersテーブルは次のようになります。

NumberGuid, PhoneNumber

外部参照テーブルは次のようになります。

MerchantGuid, NumberGuid

私はエンティティフレームワークでこれを実行できることを知っています:

var newNumber = new Number { NumberGuid = Guid.NewGuid(), PhoneNumber = "55555555555" };
Merchants.Numbers.Add(newNumber);

そして、これにより、2つのテーブルエンティティ間の外部参照テーブルに関係が挿入されます。ただし、Merchantオブジェクトを使用せずに、これらのテーブルを「関連付ける」他の方法はありますか?

例えば:

 var newNumber = new Number { NumberGuid = Guid.NewGuid(), PhoneNumber = "4444444444" };
 newNumber.MerchantGuid = alreadyKnownMerchantGuid;  // This is not available, by the way, just an example of something we are looking for in a many-to-many relationship.

ただし、newNumberは、再帰的に繰り返す「Merchants」プロパティを提供します。

すでに有効なMerchantGuidがあるので、データベースを呼び出してMerchantオブジェクトを取得せずに、この関係をすばやく作成する方法があるかどうか、多くのコードを書き直しているところです。

誰かがこれを手伝ってくれますか?

4

1 に答える 1

2

ただし、Merchantオブジェクトを使用せずに、これらのテーブルを「関連付ける」他の方法はありますか?

いいえ。EFとの多対多の関係は独立した関連付けです。つまり、モデルで使用できる外部キープロパティはありません。2つのコレクションを使用して関係を操作する必要があります。それが唯一の方法です。

しかし、次のポイントを参照してください...

...有効なMerchantGuidがすでにあるため、データベースを呼び出してMerchantオブジェクトを取得せずに、この関係をすばやく作成する方法がある場合。

Merchant関係を作成するために、データベースから既存のエンティティをロードする必要はありません。keyプロパティをvalidに設定して「スタブ」エンティティを作成し、MerchantGuidそれをコンテキストにアタッチできます。UnchangedEFの場合、これはデータベースからロードされたかのように動作する状態のエンティティです。

var newNumber = new Number {
    NumberGuid = Guid.NewGuid(), PhoneNumber = "55555555555" };

var merchant = new Merchant {
    MerchantGuid = alreadyKnownMerchantGuid, Numbers = new HashSet<Number>() };
context.Merchants.Attach(merchant);

merchant.Numbers.Add(newNumber);

context.SaveChanges();

ここにはデータベースクエリは含まれていません。結合テーブルに新しいレコードと新しい関係レコードSaveChangesを作成します。Number

于 2012-12-02T13:42:22.577 に答える