2015-06-18 8 views
5

मेरे पास एन-स्तरीय एप्लिकेशन है जिसमें विभिन्न असेंबली में कई परतें हैं। मैं इकाई फ्रेमवर्क 6.1 का उपयोग करता हूं और मैं इकाई राज्यों को ट्रैक करने के लिए बेस इकाई में ObjectState संपत्ति जोड़ना चाहता हूं। समस्या BaseEntity मेरे डोमेन ऑब्जेक्ट्स डीएल में स्थित है जो डेटाबेस स्वतंत्र है और मैं एंटीटी फ्रेमवर्क प्रोजेक्ट में ObjectState जोड़ना चाहता हूं क्योंकि यह संपत्ति इकाई ढांचे से संबंधित है। इस व्यवहार को कैसे प्राप्त करें?सी # एक संपत्ति को जोड़कर एक अलग डीएल में मौजूद वर्ग का विस्तार कैसे करें?

public enum ObjectState 
{ 
    Unchanged, 
    Added, 
    Modified, 
    Deleted 
} 
public interface IObjectState 
{ 
    [NotMapped] 
    ObjectState ObjectState { get; set; } 
} 
+0

यदि कक्षा सार्वजनिक है और मुहरबंद नहीं है, तो विरासत के साथ समस्या क्या है? मुझे लगता है कि मैं यहाँ कुछ याद कर रहा हूँ। –

+0

क्या समस्या 'NotMapped' विशेषता है? क्या आप यह सुनिश्चित करने के लिए ईएफ की धाराप्रवाह विन्यास का उपयोग कर सकते हैं कि संपत्ति को मैप नहीं किया गया है? –

+0

हैलो, मैं अपनी बेस एंटिटी में ऑब्जेक्टस्टेट को संपत्ति नहीं जोड़ना चाहता क्योंकि यह मेरे डोमेन का आधार है और यह प्रॉपर्टी एंटिटी फ्रेमवर्क विशिष्ट – yo2011

उत्तर

0

यदि आप मतलब है, कि आप BaseEntity में IObjectState लागू नहीं कर सकते, क्योंकि यह विशिष्ट एफई से स्वतंत्र होना चाहिए, तो आप संस्थाओं के दो सेट होना चाहिए - एफई के लिए एक डोमेन के लिए एक, और मानचित्रण का उपयोग (संभवतः, Automapper) इन सेट के बीच:

// domain entities assembly 
public abstract class BaseEntity { } 

// EF entities assembly 
public abstract class BaseEFEntity : IObjectState 

// somewhere in the code 
Mapper.Map(domainEntity, efEntity); 

असल में, जब स्तरित वास्तुकला का प्रयोग, यह एक बेहतर तरीका है, जब प्रत्येक परत अपने विशिष्ट मॉडल संचालित है।

+0

आपकी मदद के लिए धन्यवाद है, लेकिन यह एक और परत जोड़ देगा क्योंकि मेरे पास पहले से ही डीटीओ परत है और इसलिए, आवेदन – yo2011

2

यदि आप अपने डोमेन ऑब्जेक्ट प्रोजेक्ट्स का कोड संपादित कर सकते हैं और आधार इकाई को आंशिक वर्ग के रूप में घोषित कर सकते हैं, तो आप partial classes का उपयोग कर सकते हैं।

namespace DomainNameSpace 
{ 
    public partial class BaseEntity 
    { 
     // Your properties and method 
    } 
} 

फिर अपने इकाई की रूपरेखा परियोजना में आप निम्नलिखित कोड जोड़ सकते हैं:

namespace DomainNameSpace 
{ 
    public partial class BaseEntity 
    { 
     public enum ObjectState 
     { 
      Unchanged, 
      Added, 
      Modified, 
      Deleted 
     } 
     public interface IObjectState 
     { 
      [NotMapped] 
      ObjectState ObjectState { get; set; } 
     } 
    } 
} 

या यदि आप डोमेन परियोजना में फ़ाइलों को संपादित नहीं कर सकते या इस दृष्टिकोण, हो सकता है उत्तराधिकार कर सकते हैं पसंद नहीं है मदद। अपनी इकाई फ्रेमवर्क परियोजना में निम्न की तरह एक वर्ग बनाएं।

namespace YourProjectNameSpace 
{ 
    public class StatefulEntityClassName : BaseEntity 
    { 
     public enum ObjectState 
     { 
      Unchanged, 
      Added, 
      Modified, 
      Deleted 
     } 
     public interface IObjectState 
     { 
      [NotMapped] 
      ObjectState ObjectState { get; set; } 
     } 
    } 
} 

इस सहायता की आशा करें।

+0

पर जटिलता जोड़ देगा धन्यवाद लेकिन आंशिक कक्षाएं एक ही परियोजना (डीएल) में होनी चाहिए – yo2011

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