He estado codificando con bloques 'using', pero me pregunto si puedo devolver un IQueryable de los siguientes sin que el objeto sea eliminado antes de acceder a él.¿Cómo devuelvo un IQueryable de la consulta Linq a SQL cuando el dbContext está con un bloque 'using'?
public IQueryable<Contact> GetContacts(string clientID)
{
using (dbDataContext db = new dbDataContext())
{
var contacts = from _contacts in db.Contacts
where _contacts.ClientID == clientID
orderby _contacts.LastName ascending
select _contacts;
return contacts;
}
}
hacer yo simplemente retire el bloque de 'utilizar' y vamos .Net administrar los objetos, o puedo obtener LINQ para ejecutar la consulta temprana y devolver el objeto poblada.
tenga en cuenta que no es realmente necesario disponer explícitamente el contexto de datos. buena pregunta, de todos modos. – fearofawhackplanet
@fearofawhackplanet - er, sí lo es. Se debe asumir que cualquier objeto desechable ** requiere ** eliminación, y debe manejarse adecuadamente, IMO. Puede contener una conexión abierta, por ejemplo ... –
@Marc: Estoy siguiendo lo que he leído en varios blogs, y también casi todos los ejemplos de ScottGu y el equipo de Linq. La posición oficial de Microsoft, que yo sepa, es que puedes disponer de ella si te hace sentir mejor, pero en realidad no es necesario. Vea http://leedumond.com/blog/about-disposing-the-datacontext/ como un ejemplo para una discusión sobre el desecho y el problema de ejecución desviada que se describe en esta pregunta. – fearofawhackplanet