2012-04-14 14 views
5

मैं ईएफ 4 के लिए नया हूं, और मैं अपनी डीबीकॉन्टेक्स्ट क्लास (एसएस) बनाने का सबसे अच्छा तरीका जानने की कोशिश कर रहा हूं।क्या ईएफ के डीबीकॉन्टेक्स्ट में सभी टेबल शामिल हैं?

क्या मेरे सभी टेबल/इकाइयों को एक और केवल एक डीबीकॉन्टेक्स्ट क्लास में नीचे दिए गए कोड की तरह कोई समस्या (विशेष रूप से प्रदर्शन) है?

public class AllInOneDb : DbContext 
{ 
    public DbSet<Customer> Customers{ get; set; } 
    public DbSet<Address> Addresses{ get; set; } 
    public DbSet<Order> Order{ get; set; } 
    public DbSet<Product> Products{ get; set; } 
    public DbSet<Category> Categories{ get; set; } 
    // and more and more entities... 
} 

या क्या मुझे अपनी कक्षाओं को कार्यात्मकताओं के सबसेट के आधार पर मॉडल करना चाहिए?

public class CustomerDb : DbContext 
{ 
    public DbSet<Customer> Customers{ get; set; } 
    public DbSet<Address> Addresses{ get; set; } 
    public DbSet<Order> Order{ get; set; } 
} 

public class ProductDb : DbContext 
{ 
    public DbSet<Product> Products{ get; set; } 
    public DbSet<Category> Categories{ get; set; } 
    public DbSet<Order> Order{ get; set; } // look Order entity again! 
} 

धन्यवाद

उत्तर

7

आप उप क्षेत्रों जो विशिष्ट व्यापार तर्क है है, तो आप यह कई DbContext में विभाजित कर सकते हैं। (ये छोटे संदर्भ डोमेन संचालित डिजाइन के लिए महत्वपूर्ण पैटर्न का पालन करते हैं जिन्हें बोल्ड कॉन्टेक्स कहा जाता है)। DbContexts बनाने के कई लाभ हैं जो इन सभी प्रक्रियाओं के लिए लक्षित हैं, एक उद्देश्य के सभी संदर्भ के बजाय। जैसे-जैसे आपका आवेदन बढ़ता है, प्रत्येक संदर्भ को बनाए रखना और साथ ही उस तर्क को ढूंढना भी आसान होगा जो आपको चाहिए। (बेहतर कई DbSet गुण और अनेक वर्ग के लिए धाराप्रवाह विन्यास के साथ एकल DbContext में जोड़ने या मौजूदा तर्क को संशोधित करने की तुलना में)

प्रदर्शन एक और विचार है। जब एंटीटी फ्रेमवर्क संदर्भ में मॉडल मॉडल बनाता है, तो संदर्भ जितना बड़ा होगा उतना अधिक संसाधन में मेमोरी मॉडल उत्पन्न और बनाए रखेगा।

यदि आप कई संदर्भों के बीच उदाहरण (Order) साझा करने जा रहे हैं, तो इकाई केवल एक संदर्भ में एक संदर्भ से जुड़ी हो सकती है। पहले ग्राहक DbContext से ऑर्डर अलग करें और ऑर्डर को किसी उत्पाद DbContext से अटैच करें। और आपको एक संदर्भ से दूसरे संदर्भ में जोड़ा गया, संशोधित, या हटाई गई इकाइयों को स्थानांतरित करने (या केवल इससे बचने) के बारे में सावधान रहना चाहिए।

Order order; 
using (var custDb = new CustomerDb()){ 
    order = custDb.FirstOrDefault(o=>OrderId == "orderid"); 
} 
using (var prodDB = new ProductDb()){ 
    prodDB.Attach(order); 
    ... 
} 
+0

बाध्य संदर्भ निश्चित रूप से एक अच्छा विचार हो सकता है! प्रदर्शन हिट हालांकि अनदेखा किया जा सकता है ... मॉडल के निर्माण में अधिक समय लगता है, लेकिन यह केवल स्टार्टअप पर होता है। जितनी जल्दी हो सके इसे रखने के लिए बहुत सारी चालें हैं। कुछ वीडियो में अधिक जानकारी: http://pluralsight.com/training/Courses/TableOfContents/efarchitecture – Jowen

संबंधित मुद्दे