1

次の 2 つの POCO があるとします。

   public class Album {
      public int ID { get; set; }
      [Required]
      public string Title { get; set; }
      public short Rating { get; set; }
      public int ArtistID { get; set; }
      [Required]
      public virtual Artist Artist { get; set; }
   }

   public class Artist {
      public int ID { get; set; }
      [Required]
      public string Name { get; set; }
      public virtual ICollection<Album> Albums { get; set; }
   }

次に、次のようなコードを実行します。

    using (PickContext db=new PickContext()) {
       Album pick=db.Albums.SingleOrDefault(a => a.ID==pickID);
       if (pick==null) return;
       pick.Rating=4;
       db.SaveChanges();

次のような検証例外が発生したことに驚きました。

プロパティ: "アーティスト"、エラー: "アーティスト フィールドは必須です。"

クエリを変更してアーティストを含めると、次のようになります。

       Album pick=db.Albums.Include("Artist").SingleOrDefault(a => a.ID==pickID);

例外がなくなりました。すべてのプロパティを設定するように EF に指示せず、それらが必須ではない場合、データベース内のこれらの FK は単純に上書きされますか? エンティティを取得してプロパティを割り当てなければ、データベース内のプロパティは変更されないと思っていたでしょう。これは真実ではありませんか?

4

1 に答える 1