Prenons l'exemple suivant:Quand puis-je disposer de mon DataContext?
MyDataContext context = new MyDataContext(); // DB connection established.
MyTableRecord myEntity = myDataContext.Table.FindEntity(12345); // retrieve entity
Dis mon entité a des relations avec d'autres tables que j'accès via
foreach (var record in MyEntity.RelatedTable)
Ai-je besoin de garder mes DataContext en vie après la 2ème ligne pour accéder aux propriétés des entités ou est-il suffisamment sûr pour en disposer? Je comprends que Linq to SQL utilise l'exécution différée. Je me demande si elle n'utilise que l'exécution différée lorsque vous récupérez initialement l'entité ou si elle l'utilise lors de l'accès aux enregistrements de la table associée.
Exemple
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);
}
Ma méthode d'insertion dans mes appels repo SubmitChanges
. Ainsi est-ce acceptable ci-dessus, ou est-ce une perte de connexion. Devrais-je faire de manière réaliste:
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();
}
Pour réutiliser le DataContext déjà ouvert? Que feriez-vous dans des situations où vous ouvriez un datacontex de haut niveau et que vous deviez ensuite effectuer un traitement de bas niveau, devrais-je transmettre l'userRepo ou devrais-je créer un référentiel séparé?
Est-il toujours conseillé d'utiliser une déclaration using en traitant des repos? J'ai créé des référentiels personnalisés que j'utilise et parfois cela ne semble pas une bonne idée d'emballer tout mon code dans l'utilisation des instructions – James
Vous voulez dire que vous avez un code écrit personnalisé sur lequel vous seul travaillez et vous pouvez garantir qu'il ne fonctionne pas conserver des ressources plus longtemps que nécessaire si vous omettez l'appel Dispose, et ne le fera jamais dans le futur? Alors dans votre situation, je suppose que c'est OK de ne pas appeler en utilisant.Mais en général, il est recommandé d'appeler en utilisant n'importe quel objet qui implémente IDisposable. Vous ne ferez rien si vous ne le faites pas: le garbage collector nettoiera les objets non-exposés qui ne sont pas visibles. Mais vous ne savez pas quand le garbage collector fonctionnera, si jamais. –
Ouais bon point Mark, merci. – James