Рассмотрим следующий пример:Когда я могу избавиться от своего DataContext?
MyDataContext context = new MyDataContext(); // DB connection established.
MyTableRecord myEntity = myDataContext.Table.FindEntity(12345); // retrieve entity
Скажи мое лицо имеет отношения с другими таблицами, которые я хотел бы получить доступ через
foreach (var record in MyEntity.RelatedTable)
мне нужно держать мой DataContext в живых после того, как 2-й линии в порядке ли для доступа к свойствам объектов или же он достаточно безопасен для утилизации?
Я понимаю, что Linq to SQL использует отложенное выполнение, поэтому мне интересно, использует ли оно только отложенное выполнение, когда вы изначально извлекаете объект или используете ли он это при обращении к связанным записям таблицы.
Пример
var userRepo = new UserRepository(); // creates new DataContext
var auditRepo = new AuditRepository(); // creates new DataContext
var activeUsers = userRepo.FindActiveUsers();
foreach (var user in activeUsers)
{
// do something with the user
var audit = new Audit();
audit.Date = DateTime.Now;
audit.UserID = user.ID;
auditRepo.Insert(audit);
}
Мой метод вставки в моем репо вызывает SubmitChanges
. Таким образом, это приемлемо, или это пустая трата связи. Должен ли я реально делать:
var userRepo = new UserRepository();
var activeUsers = userRepo.FindActiveUsers();
foreach (var user in activeUsers)
{
// do something with user
var audit = new Audit();
audit.Date = DateTime.Now;
audit.UserID = user.ID;
user.Audits.Add(audit);
userRepo.Save();
}
Чтобы повторно использовать уже открытый DataContext? Что бы вы делали в ситуациях, когда вы открывали высокоуровневый файл данных, а затем приходилось выполнять некоторый уровень обработки, должен ли я пропускать userRepo или я должен создать отдельный репозиторий?
Всегда ли рекомендуется использовать инструкцию using при обращении к репозиториям? Я создал пользовательские репозитории, которые я использую, и иногда это не кажется хорошей идеей для переноса всего моего кода на использование операторов. – James
Вы имеете в виду, что у вас есть собственный код, на котором вы работаете, и вы можете гарантировать, что он не удерживайте на любых ресурсах дольше, чем необходимо, если вы опустите вызов Dispose и никогда не будете делать в будущем? Тогда в вашей ситуации, я думаю, это нормально, чтобы не звонить с использованием.Но в целом рекомендуется использовать вызов на любом объекте, который реализует IDisposable. Вы не будете пропускать что-либо, если вы этого не сделаете: сборщик мусора очистит неразмещенные объекты, выходящие за рамки. Но вы не знаете, когда будет запущен сборщик мусора, если вообще когда-либо. –
Да, хороший момент. Марк, спасибо. – James