別のエンティティへの参照を含むエンティティを更新するために体操をしなければなりませんでしたが、サイドテストプロジェクトではそれがなくても機能するため、理由がわかりません。
問題は、DbContext に同じ主キーを持つ複数のエンティティが含まれているが、他のプロパティが変更されていることです。
したがって、参照を正しく設定するには、以下のコードのようなことをしなければなりません。
これを行わない場合は、データベースに新しい "Tax" エンティティを作成します。これは、必要なものではなく、既存のエンティティへの参照です。
if (!Database.Set<Tax>().Local.Any(e => e.ID == invoiceDetail.Tax.ID))
Database.Taxes.Attach(invoiceDetail.Tax);
else
invoiceDetail.Tax = Database.Set<Tax>().Local.Single(e => e.ID == invoiceDetail.Tax.ID);
Local オブジェクトを機能させるために手動でチェックする必要があるのはなぜですか? DbContext に、同一の主キーを持つエンティティの複数のインスタンスが含まれているのはなぜですか? Code First (Poco) で EF4.3 を使用しています。