Entity Framework 7で修正されたナビゲーションプロパティのマーク

entity-framework-core

質問

すべての変更を明示的にマークしたいので、私はEF7 DbContextを無効な変更トラッキングで持っています:

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

これは私が望むのとまったく同じです。

ただし、参照(ナビゲーションプロパティ)が更新されている場合、これは機能しません。

たとえば、私のエンティティにParentIdParent 2つのプロパティがあり、 ParentIdが外部キーで、 Parentが親エンティティへの参照であるとしましょう。

呼び出し

entry.Property("Parent").IsModified = true;

ParentはEFに関してエンティティのプロパティではないため(代わりにナビゲーション)、 ModelItemNotFoundExceptionスローされます。

EF6では、これは次のように行うことができます:

var reference = context.Entry(changedEntity).Reference("Parent");
reference.CurrentValue = reference.CurrentValue;

EF7では、このような機能はありません。私はINavigationオブジェクトにINavigationできます

entry.Metadata.GetNavigation("Parent")

変更したものとしてマークする方法はありません。

だから、私はどうしたらいいですか?

注:私はParentId設定が機能することを知っていParentIdが、参照されたエンティティはIDがまだ作成されておらず、保存時にIDをデータベースから取得するため、これは私には適していません。したがって、私は参照Parentを通してそれを設定する必要があります。

編集:

上記の注意事項はEF6では当てはまりましたが、私が気づいていなかったEF7では有効ではなくなりました。したがって、解決方法は以下の注釈と解答のとおりです。

受け入れられた回答

うわー、新しいエンティティがDbContextにアタッチされると、実際にIDを取得するようです(私の場合は-1)。したがって、ターゲットエンティティが新しく、まだデータベースに追加されていなくても、 ParentId 設定でき ParentId

私は、新しいIDが一意であるというチェックがあるかどうか疑問に思っています(データベースにID -1のエントリがすでに存在する可能性があります)。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ