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;