2013-10-10 5 views
7

मैं अपने कोड में इकाइयों के 2 सेट रखने से बचकर कुछ काम बचाना चाहता हूं। अभी तक मेरे पास पहला सेट है जो डिफ़ॉल्ट कन्स्ट्रक्टर और सेटटेबल गुणों के साथ ईएफ के लिए सिर्फ एक गुच्छा डमी सरोगेट इकाइयां है, ताकि यह उन्हें मानचित्रित कर सके। दूसरा एक असली संस्थाओं का एक सेट है जिसे मैं अपने व्यापार कोड में उपयोग करता हूं। असली निर्माता अपरिवर्तनीय हैं और प्रारंभिक रचनाकारों का उपयोग करके बनाए जाने के समय पूरी तरह से प्रारंभ किए जाते हैं।क्या इकाई ढांचे में अपरिवर्तनीय इकाइयों को मैप करने का कोई तरीका है?

वहाँ एक रास्ता होने किराए की कोख से बचने और एफई में कारखानों कि settable properies का उपयोग किए बिना कंस्ट्रक्टर आरंभ के साथ सौदा करने में सक्षम हैं के कुछ प्रकार का उपयोग करके वास्तविक संस्थाओं के लिए सीधे मैप करने के लिए है?

उत्तर

6

यह संभव नहीं है, ईएफ को पैरामीटर रहित कन्स्ट्रक्टर की आवश्यकता है और यह गुण सेट करने में सक्षम होना चाहिए।

बेहतर encapsulation के लिए आप संपत्ति सेटर्स protected बना सकते हैं। ईएफ अभी भी संपत्ति मूल्यों (जेनरेट प्रॉक्सी के माध्यम से) सेट करने में सक्षम होगा लेकिन बाहरी दृष्टिकोण से यह अपरिवर्तनीय दिखाई देगा।

3

टिप्पणी जोड़ नहीं सकते हैं, इसलिए। अब यह संभव है, क्योंकि ईएफ अब निजी गुणों को मानचित्र बना सकता है। और 6.1.3 में इसे डिफ़ॉल्ट रूप से कर रहा है (पिछले रिलीज़ के बारे में निश्चित नहीं है)। नीचे उदाहरण।

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (var context = new MyContext()) 
     { 
      context.MyImmutableClassObjects.Add(new MyImmutableClass(10)); 
      context.MyImmutableClassObjects.Add(new MyImmutableClass(20)); 
      context.SaveChanges(); 
      var myImmutableClassObjects = context.MyImmutableClassObjects.ToList(); 
      foreach (var item in myImmutableClassObjects) 
      { 
       Console.WriteLine(item.MyImmutableProperty); 
      } 
     } 

     Console.ReadKey(); 
    } 
} 

public class MyContext : DbContext 
{ 
    public DbSet<MyImmutableClass> MyImmutableClassObjects { get; set; } 
} 

public class MyImmutableClass 
{ 
    [Key] 
    public int Key { get; private set; } 

    public int MyImmutableProperty { get; private set; } 

    private MyImmutableClass() 
    { 

    } 

    public MyImmutableClass(int myImmutableProperty) 
    { 
     MyImmutableProperty = myImmutableProperty; 
    } 
} 
संबंधित मुद्दे

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