次の 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 は単純に上書きされますか? エンティティを取得してプロパティを割り当てなければ、データベース内のプロパティは変更されないと思っていたでしょう。これは真実ではありませんか?