0

私はEntityFrameworkを初めて使用し、非仮想外部キーなしでデータをロードできるのに、なぜ外部キープロパティを「仮想」にする必要があるのか​​疑問に思っています。

私は2つのクラスを持っているとしましょう。どちらも仮想キーワードでコメントアウトされた行があります。データは仮想なしでもロードされます。では、なぜ仮想を使用する必要があるのでしょうか。Context.SaveChanges()を使用してレコードを追加/更新/削除すると、影響はありますか?

public class Application
{
   public int ApplicationID{get;set;}
   public string Name{get;set;}

   //public virtual ICollection<ApplicationPages> Pages{get;set;}
   public ICollection<ApplicationPages> Pages{get;set;}
}

public class ApplicationPages
{
   public int ApplicationPageID{get;set;}
   public string Name{get;set;}

   public int ApplicationID{get;set;}
   [ForeignKey("ApplicationID")]
   public Application Application{get;set;}
   //public virtual Application Application{get;set;}
}
4

1 に答える 1

1

私が理解しているように、Entity Framework がクラスのプロキシを作成できるようにするには、virtual キーワードが必要です。これは、遅延読み込みの状況を支援します。

プロキシ バリアントの詳細はわかりませんが、子 ID を元に戻し、親と一緒に保存していると思います。その後、子属性 (id 以外) にアクセスすると、子レコードを効率的にフェッチできます。

親のナビゲーション プロパティに問題があり、必要に応じて子レコードを明示的にロードすることを優先して、それらを省略しました。ただし、私のキーは 2 つの部分 (ID と発効日) であり、これが原因である可能性があります。

于 2013-03-06T16:22:28.313 に答える