Does Linq to Sql Close connections automatically? or I should use using
?
var db = new DataContext();
// Codes
or
using (var db = new DataContext())
{
// Codes
}
Does Linq to Sql Close connections automatically? or I should use using
?
var db = new DataContext();
// Codes
or
using (var db = new DataContext())
{
// Codes
}
When you are using the using
statement then the connection will be managed automatically.The DataContext
class implements the IDisposable
interface, so what you need to is to call Dispose on the DataContext
implementation whenever you are finished with it.
From the C# In Depth
There are a few reasons we implemented IDisposable:
- If application logic needs to hold onto an entity beyond when the DataContext is expected to be used or valid you can enforce that
contract by calling Dispose. Deferred loaders in that entity will
still be referencing the DataContext and will try to use it if any
code attempts to navigate the deferred properties. These attempts
will fail. Dispose also forces the DataContext to dump its cache of
materialized entities so that a single cached entity will not
accidentally keep alive all entities materialized through that
DataContext, which would otherwise cause what appears to be a memory
leak.- The logic that automatically closes the DataContext connection can be tricked into leaving the connection open. The DataContext relies on the application code enumerating all results of a query since getting to the end of a resultset triggers the connection to close. If the application uses IEnumerable's MoveNext method instead of a foreach statement in C# or VB, you can exit the enumeration prematurely. If your application experiences problems with connections not closing and you suspect the automatic closing behavior is not working you can use the Dispose pattern as a work around.
The using
version is the best you can do. The underlying connection is not closed and this is a good thing. Connections are kept in a pool so that they may be recycled.
Don't confuse your code closing a connection with the actual underlying physical connection.
You must close the connection and the best way to handle this (best practice) is the using
statement.