3

次の意味について少し混乱しています。

それらの違いは何ですか?

1)AsNoTracking-汚れチェックがないことを意味します。(EntityStateを?に変更するのと同じDetachedです)

2) -(EntityStateを?context.Detach(order)に変更するのと同じ)Detached

3)NoTracking積極的な読み込みにも必要ですか?

 creativeWorkshopEntities.Job.MergeOption = MergeOption.NoTracking;
    var q = from c in creativeWorkshopEntities.Job.Include("Files")
            where c.Id == jobId                    
            select c; 

私がしたいのはエンティティを切り離すことだけです

私の中にはusingすべてのリクエストに対するステートメントがありBL classます。

DBからキャッシュを埋めた後、エンティティをデタッチできません

私はまだアプリケーションフローでそのプロパティを呼び出しています。ランタイム例外がスローされると思います(objectContext is desposed

私の論理は正しいと思いますか?

public static Group GetMamData(string stamp, MaMDBEntities maMDBEntities)
{
    Group group = MamDataCacheManager.GetMamData(stamp);
    if (group == null)
    {
        //was not found in the cache
        //check for aveilable test with status 'start' - 1
        group = GetGroupsFromDb(stamp, maMDBEntities);

        if (group != null)
        {
            maMDBEntities.Entry(group).State = EntityState.Detached;
            MamDataCacheManager.InsertMamData(stamp, group);
        }
    }

    //option B: attache a new context
    if (maMDBEntities.Entry(group).State == EntityState.Detached)
    {
        maMDBEntities.Groups.Attach(group);
    }
    return group;
}
4

1 に答える 1

1

ORM(EF)の主な機能の1つは、変更の追跡です。適切なSQLを生成できるように、変更/削除/新しいエンティティを追跡します。

ただし、変更の追跡は無料ではありません。かなりのスペースが必要です。したがって、それが必要ない場合はAsNoTracking、最適化として使用してください。

1)AsNoTracking-汚れチェックがないことを意味します。(EntityStateをDetachedに変更するのと同じですか?)

最終結果は同じですが、後でオフにするよりも、追跡せずにロードする方が安価です。

2)context.Detach(order)-(EntityStateをDetachedに変更するのと同じですか?)

基本的に、はい。しかし、私は電話Detach()が適切な方法だと思います。

3)積極的な読み込みにはNoTrackingも必要ですか?

いいえ、そうは思いません。

于 2013-02-06T12:10:14.643 に答える