更新:これは実際には機能しませんでした。コメントを見る!
私はStackOverflowで検索すると嫌いです。答えは "できません!"または「あなたができたことはありますが、これまでに行った通話をすべて完全に変更した場合のみです。
私はこれがDbContext設定になることを期待していました。しかし、そうではないので、私はリフレクションを使って作った。
この簡単な方法は、DbSetタイプのすべてのプロパティでAsNoTrackingを設定します。
private void GloballySetAsNoTracking()
{
var dbSetProperties = GetType().GetProperties();
foreach (PropertyInfo pi in dbSetProperties)
{
var obj = pi.GetValue(this, null);
if (obj.GetType().IsGenericType && obj.GetType().GetGenericTypeDefinition() == typeof(DbSet<>))
{
var mi = obj.GetType().GetMethod("AsNoTracking");
mi.Invoke(obj, null);
}
}
}
オーバーロードされたDbContextコンストラクタに追加します。
public ActivationDbContext(bool proxyCreationEnabled, bool lazyLoadingEnabled = true, bool asNoTracking = true)
{
Configuration.ProxyCreationEnabled = proxyCreationEnabled;
Configuration.LazyLoadingEnabled = lazyLoadingEnabled;
if (asNoTracking)
GloballySetAsNoTracking();
}
リフレクションを使用します。これは、誰かがこれがパフォーマンスヒットであるとすぐにコメントすることを意味します。しかし、それは本当にヒットしたのでしょうか?あなたのユースケースによって異なります。
あなたのリンクは私にエラーを表示する –
@AliYousefieありがとう、私はそれを修正しました。 –