Web API アプリケーションを開発しています。VS2012 テンプレートで自動生成された EF 5.0 と POCO クラスを使用しています。遅延読み込みとプロキシ生成は無効になっています。
オブジェクトをシリアル化すると、JSON 出力にナビゲーション プロパティが含まれ、値が「null」になっていることがわかりました。
オブジェクトが逆シリアル化されると (つまり、「保存」アクションの場合)、これらのナビゲーション プロパティは「null」ではなく、オブジェクトの空のインスタンスで評価されます。
シリアル化の例を次に示します。
[{"EmployeeTimeblockId":1,"EmployeeId":1,"DayOfWeek":0, "StartDate":"2012-05- 27T00:00:00", "EndDate":"2012-09- 02T00:00:00", "StartTime":"16:00:00","EndTime":"18:00:00","Notes":"null","Employee":null}]
「Employee」フィールドがまだ null の状態でこのオブジェクトを送り返すと、デシリアライザーはその値を新しい Employee() インスタンスで変更します。Entity Framework は明らかにこのオブジェクトをアタッチしようとするため、これは問題です。この動作は望ましくありません。
私の回避策は、次のように、オブジェクト ナビゲーション プロパティを手動で null に設定することです。
var uow = new Infrastructure.Database.UnitOfWork();
var rep = uow.EmployeeTimeblockRepository;
e.Employee = null;
rep.Update(e);
uow.Save();
しかし、これはエレガントなソリューションではありません。DTOを使用せずに、クリーンなデシリアライズされたオブジェクトを取得する方法について何か提案はありますか?
ありがとう、ニコラ