Я использую код, похожий на этот, для выбора большого списка объектов только для чтения:
using (DBContext db = new MyContextClass())
{
... data creation ...
db.SaveChanges();
}
using (DBContext db = new MyContextClass())
{
db.Configuration.LazyLoadingEnabled = false;
db.Configuration.ProxyCreationEnabled = false;
db.Configuration.AutoDetectChangesEnabled = false;
DbQuery data = db.Set(someType)
foreach (string propertyName op in somePropertieNames)
data = data.Include(propertyName);
foreach (object item in data.AsNoTracking())
ScanNavigatorsOf(item);
}
в ScanNavigatorsOf()
я прочитал все свойства навигации и заметил, что первый объект, выданный циклом foreach
, имеет неполные коллекции и ссылки. Кажется, что заполнение свойств навигации еще не завершено, когда программа обращается к моему методу ScanNavigatorsOf(...)
. Все остальные объекты имеют полные свойства навигации. Я запускаю для этого модульные тесты, чтобы убедиться, что объекты хорошо хранятся в базе данных.
Как я могу дождаться полного заполнения навигационных коллекций и ссылок загруженных объектов?
Как описано в событии ObjectContext.ObjectMaterialized кажется, что коллекции не материализуются одновременно с объектом main, но как узнать, когда процесс завершен?