2011-01-02 29 views
10

Veritabanı modelimden otomatik olarak oluşturulan bir varlık sınıfım var. Bu sınıf, devralınan devralınan ObjectContext'i devralır.Nesne bağlamının varlık çerçevesinde atılması 4

Veritabanıyla etkileşim kurmak için varlık nesnesinin tek bir örneğini kullanan çeşitli yöntemlere sahip bir depo oluşturdum.

Otomatik oluşturulan sınıf Bundan

public partial class DevEntities : ObjectContext 
{ 
    public const string ConnectionString = "name=DevEntities"; 
    public const string ContainerName = "DevEntities"; 

Depo Sınıf

DevEntities db = new DevEntities(); 

     public Customer GetCustomerByID(int id) 
    { 
     var customers = db.Customers.FirstOrDefault(c => c.CustomerId == id); 

     return customers; 
    } 

    public Customer GetCustomerByPasswordUsername(string email, string password) 
    { 
     var customers = db.Customers.FirstOrDefault(c => c.Email == email && c.Password == password); 

     return customers; 
    } 

ben db örneği için çok sayıda başvuru yapmak olduğunu görebilirsiniz. Benim sorum, her bir yöntemde yeni bir DevEntity'yi daha iyi bir hale getirmek, böylece kullanım bildirimini uygulamak ve böylece doğru bir şekilde imha edilmesini sağlamak mı, yoksa şu anki uygulamam tamam mı?

cevap

9

'u atıyor, böylece Deposu sınıfında da IDisposable uygulardım. Her defasında farklı bir ObjectContext döndürürseniz, bu nesneler arasında, bu özel durumlar ile sonuçlanacak farklı ObjectContext s ekleri gibi sorgulamalar yaparken sorunlarla karşılaşabilirsiniz.

Tanımı:

public class Repository : IDisposable 
{ 
    DevEntities db = new DevEntities(); 

    public Customer GetCustomerByID(int id) 
    { 
     var customers = db.Customers.FirstOrDefault(c => c.CustomerId == id); 

     return customers; 
    } 

    public Customer GetCustomerByPasswordUsername(string email, string password) 
    { 
     var customers = db.Customers.FirstOrDefault(c => c.Email == email && c.Password == password); 

     return customers; 
    } 

    public void Dispose() 
    { 
     db.Dispose(); 
    } 
} 

Kullanımı: Bunu yapmak

using(Repository r = new Repository()) 
{ 
    //do stuff with your repository 
} 

, deponuzu bunu kullandıktan sonra ObjectContext elden ilgilenir.

+0

Eğer bunu yapsaydım, imha edilebilirlik yöntemini geçersiz kılmam gerekir diye düşünüyorum. Peki bu nasıl görünebilir? Nesneyi bertaraf eder miydi ve her bir metot bu yönteme referans verecek ve böylece orada örneği silecek mi? – hoakey

+0

Hayır, bunu geçersiz kılmanıza gerek yok, deponuzdaki arabirimi uyguladınız; Artık, kullanım ifadesindeki depoyu kullanabilirsiniz, böylece sınıf kullanımın sonunda otomatik olarak yerleştirilir. – Femaref

+0

Kalınlığım için üzgünüm, bunun nasıl işe yarayacağını hala izlemiyorum. Biraz daha detaylandırır mısınız lütfen? Çok teşekkürler. – hoakey

İlgili konular