2011-05-03 19 views
7

के लिए तीन स्तरीय समाधान कैसे बनाएं I मैंने समाधान में तीन परियोजनाएं, एक वेब प्रशंसा, डीएएल और बीएलएल के लिए दो कक्षा पुस्तकालयों का निर्माण किया। डीएएल परत में एंटीटी फ्रेमवर्क मॉडल बनाया और बीएलएल परियोजना में डीएएल लाइब्रेरी का संदर्भ दिया।एंटिटी फ्रेमवर्क

जब मैं वेब अनुप्रयोग प्रोजेक्ट से बीएलएल ऑब्जेक्ट्स को कॉल करता हूं तो समस्याएं चल रहा हूं, यह कहता है कि मुझे इकाई ढांचे को संदर्भित करने की आवश्यकता है। मैं वेब अनुप्रयोग प्रोजेक्ट में डीएएल लाइब्रेरी ऑब्जेक्ट्स पर कोई निर्भरता नहीं चाहता हूं।

क्या एंटीटी फ्रेमवर्क का उपयोग करके स्वच्छ तीन-स्तरीय आवेदकॉन बनाने पर कोई विशिष्ट मार्गदर्शन है।

उत्तर

17

लगता है जैसे आपका बीएलएल डीएएल में जोड़े गए entity कक्षाओं को उजागर कर रहा है। आपको बीएलएल में रैपर वर्ग (वो पीओसीओ) बनाने की आवश्यकता होगी और डीएएल से इकाइयों की बजाय उन्हें वापस कर दें।

यह संभव है कि आप हैं कर रही है:

// DAL 
// .edmx file generated entities 
public IQueryable<TableEntity> GetTableEntities() 
{ 
    // read from entity framework and return 
} 

// BLL 
public IEnumerable<TableEntity> ReadTableEntitiesForUser(int userID); 
{ 
    var d = new DAL(); 
    var entities = d.GetTableEntities(); 
    // restrict to entites this user "owns" 
    entities = entities.Where(e => e.OwnerID.Equals(userID)); 
    return entities;   
} 

// WebApp 
var b = new BLL(); 
var myEntities = b.ReadTableEntitiesForUser(1234); 

यह संभव है कि आप करना चाहिए है:

// DAL 
// .edmx file generated entities 
public IQueryable<TableEntity> GetTableEntities() 
{ 
    // read from entity framework and return 
} 

// BLL 
public class TableEntityDTO 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    // continue on for each column in the table 
    // and make a DTO class for each table in your database 
} 
public IEnumerable<TableEntityDTO> ReadTableEntitiesForUser(int userID); 
{ 
    var d = new DAL(); 
    var entities = d.GetTableEntities(); 
    // restrict to entites this user "owns" 
    entities = entities.Where(e => e.OwnerID.Equals(userID)); 
    // convert from "Entity Framework Object" to "BLL Object" 
    foreach(var e in entities) 
    { 
     yeild return new TableEntityDTO() { ID = e.ID, Name = e.Name }; 
    } 
} 

// WebApp 
var b = new BLL(); 
var myEntities = b.ReadTableEntitiesForUser(1234); 

इस इकाई की रूपरेखा के साथ भेज दिया कि लिए सच है। नेट 3.5SP1 और लिंक-टू-एसक्यूएल के लिए, जिनमें से मैंने थोड़ा सा उपयोग किया है, यह ईएफ के नवीनतम संस्करणों के लिए सच हो सकता है, लेकिन कोड-फर्स्ट और अन्य चीजों के साथ इस अतिरिक्त डेटा-ट्रांस से बचने का एक तरीका हो सकता है फेर-ऑब्जेक्ट चरण, हालांकि एक सेवा ओरिएंटेड आर्किटेक्चर के साथ, डीटीओ संभवतः जाने का सबसे अच्छा तरीका है।

+0

धन्यवाद @ नेट, डाटा-ट्रांसफर-ऑब्जेक्ट मिस गया और परेशानी हो गई। – inlokesh

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