Windows Forms uygulamasında verileri depolamak ve bunlara erişmek için MSSQL ile birlikte Entity Framework 4 kullanıyorum. İşte Bu bağlamda nerelere aykırı davranabilirim?
Ben verilere erişme kullanmak bir örnek sınıftır: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();
}
}
Ve burada kullanmak nasıl bir örnek.
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();
}
}
Birisi düzgün bağlantı "temizlemek" için IDisposable kullanmak önerdi, ama ben bu uygulamaya nasıl bilmiyorum.
Herhangi bir öneriniz var mı? Zaman ayırdığın için teşekkürler.
using(UserRepository repo = new UserRepository())
{
// ...
}
Bu kullanarak bloğu ayrılırken atarken çağırır ve UserRepository temizler: Gerçekten nokta var, ancak IDisposable
uygulamak gibi görünüyor, ancak using
Dispose
arayabilir veya kullanmanız gerekiyorsa
Ah! Önemli olan buydu. :) Kullanılan ifadeyi eklemeyi unuttum, böylece nesne imha edildi. Zaman ayırdığın için teşekkürler. Bir Havuz dersi kullandığımda her zaman bunu önerir misiniz? –
IDisposable türleri ile uğraşırken HER ZAMAN bunu yapmalısınız. Yapmazsanız bellek sızıntıları ve muhtemelen kötü yan etkiler alırsınız. –
Evet, tabi ki, sınıfın her örneği, kullanıldıktan sonra imha edilmelidir. – Enyra