Estoy usando Entity Framework 4 junto con MSSQL para almacenar y acceder a los datos en mi aplicación Windows Forms.¿Cómo podría imponer IDisposible en este contexto?
Aquí es una clase de ejemplo que utilizo para acceder a los datos:
public class StudentRepository : IDisposable
{
ColegioDBEntities db = new ColegioDBEntities();
public IQueryable<Student> FindAllStudents()
{
return db.Students;
}
public Student FindStudent(int id)
{
return db.Students.SingleOrDefault(c => c.StudentId == id);
}
public void Add(Student Student)
{
db.AddToStudents(Student);
}
public void Save()
{
db.SaveChanges();
}
public void Dispose()
{
db.Dispose();
}
}
Y aquí es un ejemplo de cómo lo uso.
private void btnLogin_Click(object sender, EventArgs e)
{
UserRepository repo = new UserRepository();
var result = repo.FindAllUsers().Where(u => u.Username == txtUsername.Text && u.Password == txtPassword.Text);
if (result.Count() > 0)
{
MainForm form = new MainForm(txtUsername.Text);
form.Show();
this.Hide();
}
else
{
MessageBox.Show("Usuario y/o contraseña incorrecta.",
"Acceso Denegado",
MessageBoxButtons.OK,
MessageBoxIcon.Stop,
MessageBoxDefaultButton.Button1);
txtUsername.Focus();
txtPassword.Focus();
}
}
Alguien sugirió que yo uso IDisposable para "limpiar" correctamente la conexión, pero no sé cómo implementar esto.
¿Alguna sugerencia? Gracias por tu tiempo.
¡Ah! Ese era el punto. :) Me olvidé de incluir la declaración using para que el objeto sea eliminado. Gracias por tu tiempo. ¿Recomiendas que haga esto cada vez que utilizo una clase de repositorio? –
Usted realmente debe SIEMPRE hacer esto cuando se trata de tipos IDisposable. Obtendrá pérdidas de memoria y probablemente malos efectos secundarios si no lo hace. –
Sí, por supuesto, cada instancia de una clase que se puede eliminar debe ser eliminada después de usarla. – Enyra