2010-05-11 10 views
9

"ObjectSet ile Çalışma (Entity Framework)" başlıklı bu MSDN makalesinin okunması "Bir Ürünün nasıl ekleneceğine ilişkin iki örnek gösterilmektedir. 3.5 için bir tane ve 4.0 için bir tane daha. Bilginin benim olmayarakEntity Framework aracılığıyla "Ürün" eklemeye yönelik 3 yöntem. Fark ne?

http://msdn.microsoft.com/en-us/library/ee473442.aspx

Burada muhtemelen tamamen eksik bir şey değilim, ama ben böyle bir Ürün eklendi asla:

//In .NET Framework 3.5 SP1, use the following code: (ObjectQuery) 
    using (AdventureWorksEntities context = new AdventureWorksEntities()) 
    { 
     // Add the new object to the context. 
     context.AddObject("Products", newProduct); 
    } 

    //New in .NET Framework 4, use the following code: (ObjectSet) 
    using (AdventureWorksEntities context = new AdventureWorksEntities()) 
    { 
     // Add the new object to the context. 
     context.Products.AddObject(newProduct); 
    } 

ben o iki şekilde yapılır ve sadece kullanılan olmazdı:

// (My familiar way) 
    using (AdventureWorksEntities context = new AdventureWorksEntities()) 
    { 
     // Add the new object to the context. 
     context.AddToProducts(newProduct); 
    } 

Bu üç yol arasındaki fark nedir?

"Benim yolum" bir ObjectQuery kullanmanın başka bir yolu mu?

sayesinde Kohan

cevap

9

Hepsi sözdiziminde küçük farklarla, aynı şeyi yapın.

İlk olarak, 3.5 yoluna ve "yolunuza" bakalım. Eğer EDMX için codegen dosyasına bakarsanız, böyle bir şey görürsünüz: Kodunuzdaki sihirli dize codegened sürümü tarafından değiştirilmesi haricinde

public void AddToProducts(Product product) 
    { 
     base.AddObject("Products", product); 
    } 

Yani bu iki yöntemin, tam olarak aynı olan can asla yanılma.

".NET 4 yolu" aynı şeyi yapar, ancak farklı yapar. Güçlü bir şekilde yazılan referansı dinamik olarak ancak dizeleri kullanmadan oluşturmanıza olanak veren güçlü bir şekilde yazılan ObjectSet<T>'u kullanır. Bir içeriğe bir nesne eklenmesi durumunda, bildiğim gerçek bir avantaj yoktur, ancak varlıklarınızı nasıl referans gösterdiğiniz konusunda daha tutarlı olmanızı sağlaması dışında, aynı özelliği kullanarak bunları bağlamdan okursunuz. Yazmak için kullandığınız (Context.Products).

+0

ObjectSets, varsayılan kod üretecinde önbelleğe alınır. Bu yüzden, context.Products.Addows kullanmak için biraz fazla kazanç elde edildiğini tahmin ediyorum, çünkü herhangi bir aramada aynı seti yeniden kullanabilecektir. –

+0

Mükemmel. Bunu bana açıkladığın için çok teşekkürler. Hayal ettiğimden çok daha basit çıktı. Sahnelerin ardında neler olup bittiğini daha iyi anlamak için tüm bu oluşturulan dosyaları daha sık kontrol etmeliyim. Şimdi bir bakacağım ve başka neler olup bittiğini göreceğim! – 4imble

+0

Bu * çok fazla * kodgen dosyasını okumaya değer. Yazmıyor olsanız bile bu kodu her zaman kullanırsınız. Sihirli dizelere karşı kampanya için –