私はAPIを構築するためにASP.NET Coreを使用しており、データアクセスのために私はEF Coreを使用しています。 StackoverflowとGoogleの周りをサーフィンすると、変更された列だけをリポジトリパターンで更新する方法が見つかりません。Entity Frameworkコアで変更された列を更新するには?
値が変更されているかどうかを確認する手段はありますか?
public virtual void Update(T entity)
{
// DbContext.Attach(entity);
var dbEntityEntry = DbContext.Entry(entity);
foreach (var property in dbEntityEntry.Properties)
{
var original = dbEntityEntry.OriginalValues.GetValue<object>(property.Metadata.Name);
var current = dbEntityEntry.CurrentValues.GetValue<object>(property.Metadata.Name);
if (original != null && !original.Equals(current))
dbEntityEntry.Property(property.Metadata.Name).IsModified = true;
}
}
私はEF 6のように実装しようとしたが、それはInvalidCastExceptionがに
System.InvalidCastExceptionの投げている:「タイプ System.Func'2 [Microsoft.EntityFrameworkCore.ChangeTrackingのオブジェクトをキャストすることができませんが。 Internal.InternalEntityEntry、System.Int32] 'を入力して' System.Func`2 [Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry、System.Object]と入力します。
私はクライアントから受け取ったオブジェクトをアクションコントローラに直接更新して更新しています。
本当にありがとうございます。であなたの通過が元々EF自体は文句を言わないのプロパティが変更されたりしていないものを追跡することができるので、エンティティは、追跡することが文句を言わない、その後dbContextから取得されていないことを
おかげ
なぜあなたは自分で行う必要があるでしょうあなたは思いますか?プロファイラでUPDATEクエリを取得し、すべてのフィールドが変更されていない場合でもSET句に存在することを確認しましたか? – CodeCaster
はい私はSql Express Profilerでチェックしました。オブジェクト全体を送信するときに、値が変更されていなくてもUPDATE文で設定されています。 jsonオブジェクトでプロパティを送信しないと、ValidationEntityResultがスローされます。 –
誰もこの問題に直面しましたか? –