ナビゲーション プロパティの変更の検出に問題があります。
私のテストモデルは次のようになります。
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string Name { get; set; }
}
Name プロパティと Address プロパティの両方が割り当てられた Person 型のオブジェクトを作成して保存しました。私の問題は、Person オブジェクトをデータベースから取得し、Address プロパティを (たとえば Null に) 変更すると、ef が変更を検出しないことです! 私のコードはこれです:
using (var ctx = new EFContext())
{
Person p = ctx.People.First();
//p.Address IS NOT NULL!
p.Address = null;
var entry = ctx.Entry(p);
}
entry.State
変更されていないのはなぜですか?
編集: SaveChanges を呼び出すと、レコードが正しく保存されます (アドレスが null になります)。
編集 2:ビリーが提案したように外部キー プロパティを作成しました。Visual Studio で Person オブジェクトを調べると、State は Modified です。オブジェクトの値を調べるデバッガで停止しない場合、State は Unchanged です!
編集 3: ctx.People.Include(x => x.Address).First(); を使用して Person オブジェクトをロードする 問題を解決します。Include の呼び出しを回避し、AddressId の代わりに Address プロパティを変更し続ける方法はありますか?