代码改变世界

How to improve the ef4.1 where handle the large data

2012-01-09 10:57  barbarossia  阅读(185)  评论(0编辑  收藏  举报

EF4.1 is the framework which can take advantage of the data proccess. But when it handle the large data, it is too slower to reaction.

So the sample is how to improve the data proccess who use the ef4.1

Insert code snip:

            using (var context = GetContext())
{
context.Configuration.AutoDetectChangesEnabled = false;
cbr.CreatedDateUtc = cbr.ModifiedDateUtc = DateTime.UtcNow;
context.Cbrs.Add(cbr);
foreach (var key in cbr.CbrKeys)
{
context.CbrKeys.Add(key);
}
context.SaveChanges();
}

Update code snip:

            List<KeyInfo> dbKeys = null;
using (var context = GetContext())
{
dbKeys = GetKeys(context, keys.Select(k => k.KeyId).ToArray());
}
ValidateUpdateKeys(dbKeys.Count, keys.Count);
foreach (KeyInfo key in dbKeys)
{
if (keyState != null)
{
key.KeyState = (KeyState)keyState;
key.KeyStateId = (byte)keyState;
key.ModifiedDate = DateTime.Now;
}
if (isInProgress != null)
key.KeyInfoEx.IsInProgress = isInProgress.Value;
if (shouldUpdateSsIdIfNull || ssId != null)
key.KeyInfoEx.SsId = ssId;
if (shouldCarbonCopy != null)
key.KeyInfoEx.ShouldCarbonCopy = shouldCarbonCopy;
}
using (var contextUpdate = GetContext())
{
contextUpdate.Configuration.AutoDetectChangesEnabled = false;
foreach (var key in dbKeys)
{
contextUpdate.KeyInfoes.Attach(key);
contextUpdate.Entry(key).State = EntityState.Modified;
if (keyState != null)
{
InsertKeyHistory(contextUpdate, key);
}
if (isInProgress != null || (shouldUpdateSsIdIfNull || ssId != null) || shouldCarbonCopy != null)
{
contextUpdate.KeyInfoExes.Attach(key.KeyInfoEx);
contextUpdate.Entry(key.KeyInfoEx).State = EntityState.Modified;
}
}
contextUpdate.SaveChanges();
}


The key is the code:

contextUpdate.Configuration.AutoDetectChangesEnabled = false;