Відповіді:
Якщо ви хочете від'єднати існуючий об’єкт, дотримуйтесь порад @ Slauma. Якщо ви хочете завантажити об'єкти без відстеження змін, використовуйте:
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
Як зазначається в коментарі, це не повністю відмежовує суб'єкти. Вони все ще додаються і ледачі завантажувальні роботи, але сутності не відстежуються. Це слід використовувати, наприклад, якщо ви хочете завантажити об'єкт лише для читання даних, і ви не плануєте їх змінювати.
Це варіант:
dbContext.Entry(entity).State = EntityState.Detached;
entity
повинен бути матеріалізованим об'єктом типу, який є частиною ваших модельних класів (Person, Customer, Order тощо). Ви не можете безпосередньо перейти в IQueyable <T> у dbContext.Entry(...)
. Це питання, яке ви мали на увазі?
Detached
. Якщо ви хочете завантажити об'єкти з БД, не прив’язуючи їх до контексту (відстеження змін), використовуйте AsNoTracking
.
Detached
.
using(ctx){ return ctx....ToList(); }
. У таких випадках використанняAsNoTracking()
було б багато сенсу, оскільки я б економив заповнення контексту об'єкта без потреби. Я думаю, це, мабуть, матиме корисність для продуктивності та споживання пам'яті, особливо для великих списків, правда?