Если вы хотите только текущие данные, используйте MergeOption.NoTracking.Это означает, что они не хранятся в графиках, которые отслеживают обновления и удаления объектов в одном контексте.Если данные, которые вы читаете, уже обновлены в другом контексте, окне или приложении, этот метод гарантирует, что прочитанные вами данные будут актуальными.Следует отметить, что отключение отслеживания объектов также не позволит вам отправлять обновления в базу данных.Поэтому после прочтения вы должны поместить значение MergeOption в оригинал.
System.Data.Objects.MergeOption mergeOption = DDBML.tblConstructionRevisions.MergeOption;
DDBML.tblConstructionRevisions.MergeOption = System.Data.Objects.MergeOption.NoTracking;
var newRev1 = (from y in DDBML.tblConstructionRevisions
orderby y.RevDate descending, y.RevNo descending
where y.DrawID == drawID select y);
DDBML.tblConstructionRevisions.MergeOption = mergeOption;
Или вы можете использовать метод ExecuteStoreQuery () и указать NoTracking в параметрах.Этого же эффекта можно достичь.
var newRev1=db.ExecuteStoreQuery<tblConstructionRevisions>(
"SELECT * FROM tblConstructionRevisions y WHERE y.DrawID = @ID
order by y.RevDate desc, y.RevNo desc",
"tblConstructionRevision",
System.Data.Objects.MergeOption.NoTracking,
new SqlParameter("@ID", drawID));
В Entity Framework 4.1 вы можете использовать новый метод AsNoTracking ():
var newRev1 = (from y in DDBML.tblConstructionRevisions.AsNoTracking()
orderby y.RevDate descending, y.RevNo descending
where y.DrawID == drawID select y);
или
var newRev1 = (from y in DDBML.tblConstructionRevisions
orderby y.RevDate descending, y.RevNo descending
where y.DrawID == drawID select y).AsNoTracking();
Что делает NoTracking
Entity Framework предоставляет ряд параметров настройки производительности, которые помогут вам оптимизировать производительность ваших приложений.Одним из таких параметров настройки является .AsNoTracking ().Эта оптимизация позволяет вам сказать Entity Framework, что он не отслеживает результаты запроса.Это означает, что Entity Framework не выполняет никакой дополнительной обработки или хранения объектов, возвращаемых запросом.Однако это также означает, что вы не можете обновить эти объекты, не подключая их к графику отслеживания.