0

複雑なエンティティのナビゲーションプロパティを定義するための公式のアプローチは次のとおりです。

public class SuperEntity
{    
    public int Id { get; set; }
    //Other properties
}

public class LowerEntity
{
    public int Id { get; set; }
    public int SuperEntityId { get; set; }
    public virtual SuperEntity SuperEntity { get; set; }    
    //Other properties
}

ここでの主なことは、参照する(リンクされたスーパーエンティティへのナビゲーションを可能にする)クラスには、public SuperEntity SuperEntity { get; set; }プロパティとのIDの両方があるということpublic int SuperEntityId { get; set; }です。

public int SuperEntityId { get; set; }私は、「下位エンティティ」のプロパティを省略したエンティティ設計に数日入りました 。したがって、仮想SuperEntityプロパティのみでナビゲートしています。そして、すべてが正常に機能します!しかし、SOの人々から、DBに過剰なテーブルが作成されると言われました。私はチェックしました、そしてそれは真実ではありません。私のアプローチを使用すると、DBテーブルにはSuperEntityId列があり、参照されているエンティティIDが自動的に入力されます。public int SuperEntityId { get; set; }では、この分野のポイントは何ですか?

または、おそらく、私が行っていることは、4.3のようなEFの「新しい」バージョンで利用可能になりましたか?

4

2 に答える 2

2

SuperEntityIdのポイントは、コンテキストが常に有効ではないアプリ(Webアプリなど)で外部キープロパティを使用する方が簡単な場合があることです。このような状況では、オブジェクトBをオブジェクトAにアタッチしようとするよりも、外部キープロパティを使用する方がはるかに簡単です。
私の知る限り、navプロパティでは、EFはオブジェクトを使用して2つのオブジェクト間の関係を追跡します。したがって、オブジェクトBをオブジェクトAに結合する場合、切断されたアプリでは、オブジェクトAにプロパティを設定するだけでは不十分です。また、チェンジトラッカーにオブジェクトAのエントリをいじって、Bとの関係を登録する必要があります。 A.外部キープロパティを設定することは、この手間をかけることと同じです。EFを始めたばかりで、これらすべてについて知らなかったとき、2つのオブジェクト(たとえばBをAに接続し、BがDBにすでに存在する)を接続するたびに、コンテキストはBがではなく新しいオブジェクトであると考えました。既存のものであり、DB内のレコードを複製しました。

于 2012-08-13T10:54:15.210 に答える
0

過剰なテーブルは作成されませんが、そのデータベースで余分な、またはより長いクエリが生成される可能性があります。ただし、それはこれらのエンティティをどのように使用しているかによって異なります。

于 2012-08-13T10:34:17.927 に答える