Take the following example:
MyDataContext context = new MyDataContext(); // DB connection established.
MyTableRecord myEntity = myDataContext.Table.FindEntity(12345); // retrieve entity
Say my entity has relationships with other tables which I would access via
foreach (var record in MyEntity.RelatedTable)
Do I need to keep my DataContext alive after the 2nd line in order to access the properties of the entities or is it safe enough to dispose of?
I understand Linq to SQL uses delayed execution hence I am wondering if it only uses delayed execution when you initially retrieve the entity or whether it uses this when accessing the related table records aswell.
Example
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);
}
My insert method in my repo calls SubmitChanges
. So is the above acceptable, or is this a waste of a connection. Should I realistically do:
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();
}
To re-use the already open DataContext? What would you do in situations where you open a high-level datacontext and then had to do some processing low level, should I pass the userRepo down or should I create a separate Repository?