0

Entity Framework を使用してデータベース テーブルにマップする、さまざまなオブジェクトを含むオブジェクト モデルがあるとします。それはすべてうまくいきます。問題は、より多くのオブジェクトをデータベースに保存したい場合にどうなるかです。モデル内のオブジェクトは相互接続されているため、オブジェクトをデータベースに保存すると、データベースに既に存在するオブジェクトへの参照が含まれている場合があります。

たとえばPerson、プロパティを持つオブジェクトが呼び出された場合Friendsそれ自体が人々のリストです。これは、データベースに人物のテーブルがあり、それぞれに ID で識別される友人のリストがあることを意味します。2 人の ID が同じである場合、それらは同じ人物であると仮定すると、それらを再度追加しようとすると、Entity Framework がエラーをスローすると思います。したがって、問題は、既に友人のリストを持っている別の人物オブジェクトを追加するときに、データベースにない友人を追加したいのですが、既にデータベースにある友人を追加したくないということです。また、それらの人々のそれぞれには、データベースに含まれている/含まれていない友人がいる可能性があり、それらも考慮してほしい. 考慮すべきもう 1 つの点は、その人物が既にデータベースに存在している場合でも、その人物の友人のリストを調べて、新しい友人を追加したいということです。

これは、データベースを扱う場合によくある問題だと思いますが、実際にはすべての検索で有用なものが何も出てこないので、おそらく間違った語彙を使用しているのでしょう。主に、事後にデータベースをスキャンして重複を探す方法などを扱います。これは、Entity-Framework 承認済みの会場を通じて、ビジネス ロジックの C# コード レイヤーで処理されるようにしたいと考えています。どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

1

Dictionaryあなたが提起した問題は有効ですが、オブジェクトを aまたはに追加することと基本的に違いはありませんHashSet。特定のPersonまたは関連するFriendものがすでにデータベーステーブルに含まれているかどうか、Dictionaryまたはデータベーステーブルに含まれているかどうかを確認するだけです。Entity Framework を使用する利点は、これらの操作が非常に類似していることです。

したがって、次のようなメソッドを使用できます( context.People.Find(id)context.People.Contains(newPerson)を実装する必要があります)。IEquatable<Person> for that), or

同様に、使用できます

   foreach(friend in newPerson.Friends)
   {
    if(!context.People.Contains(friend)
      context.People.Add(friend)
  }
于 2012-07-26T19:37:31.257 に答える