1. ホーム
  2. c#

[解決済み] ナビゲーションプロパティは仮想であるべき - ef coreでは必要ない?

2023-04-18 12:05:23

質問

EFの記憶では ナビゲーションプロパティは、仮想 :

public class Blog 
{  
    public int BlogId { get; set; }  
    public string Name { get; set; }  
    public string Url { get; set; }  
    public string Tags { get; set; }  

    public virtual ICollection<Post> Posts { get; set; }  
}

しかし、私は EFコア を見てみると、仮想とは思えない。

public class Student
    {
        public int ID { get; set; }
        public string LastName { get; set; }
        public string FirstMidName { get; set; }
        public DateTime EnrollmentDate { get; set; }

        public ICollection<Enrollment> Enrollments { get; set; }
    }

もう必要ないのでしょうか?

どのように解決するのですか?

virtual は決して 必須 であったことはありません。遅延ロードのサポートが必要な場合のみ必要でした。

以来 遅延ロードはまだEF Coreでサポートされていません。 であるため、現在 virtual は特別な意味を持ちません。遅延ロードのサポートが追加されたとき(そしてされたとき)、特別な意味を持つようになるでしょう。 計画 があります)。

更新しました。 EF Core 2.1より開始しました。 レイジーローディング がサポートされるようになりました。しかし、もしあなたが Microsoft.EntityFrameworkCore.Proxiesを追加しなければなりません。 パッケージを追加し UseLazyLoadingProxies を介して有効にします。

しかし、そうすると、最初の実装でオプトインコントロールがなかったために、事態はまったく変わってしまいます。 が必要です。 すべて ナビゲーションのプロパティは virtual . これは私には意味がないので、修正されるまで使わない方がいいでしょう。もし本当に遅延ロードが必要なら、代わりの方法として プロキシを使わない遅延ロード アプローチで、その場合は再び virtual は重要ではありません。