2010-08-01 16 views
5

मैं भंडार इंटरफेस के साथ एनएचबेर्नेट का उपयोग करता था।एंटीटी फ्रेमवर्क के साथ रिपोजिटरी पैटर्न 4

ईएफ के साथ इस पैटर्न का उपयोग करने का उचित तरीका क्या है?
RepositoryBase<T> के लिए, मैं इस भंडार इंटरफ़ेस को कैसे कार्यान्वित कर सकता हूं?

public interface IRepository<T> 
{ 
    T GetById(object id); 
    void Save(T entity); 
    T[] GetAll(); 
    void Delete(T entity); 
} 

उत्तर

0

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

ईएफ 4 के साथ ObjectSet<T> का उपयोग करके एक सामान्य भंडार को लागू करना संभव है। कुछ लेख है कि मदद कर सकता है पर एक नज़र डालें:

http://devtalk.dk/2009/06/09/Entity+Framework+40+Beta+1+POCO+ObjectSet+Repository+And+UnitOfWork.aspx

http://www.forkcan.com/viewcode/166/Generic-Entity-Framework-40-Base-Repository

0

आप मूल रूप से अपने डेटा संग्रह स्थान यो अपने ऑब्जेक्ट संदर्भ में बात की है। केवल बदल मैं अपने GetAll वापसी की तरह एक IEnumerable के बजाय कुछ होने किया जाएगा बनाना होगा:

public class SomeObjectRepo : IRepository<SomeObject> 
{ 
    SomeContext GetById(object id) 
    { 
     using(var context = new MyContext()) 
     { 
      return context.SomeObjects.First(x=>x.id.Equals(id)); 
     } 
    } 

etc... 
} 
0

यह मेरा समाधान है: http://www.necronet.org/archive/2010/04/10/generic-repository-for-entity-framework.aspx

मुझे यह पसंद है क्योंकि यह की विशेष उदाहरण से भंडार की नहीं जोड़ी उदाहरण करता है वस्तु संदर्भ, इसलिए कुछ डी ढांचे के साथ, मैं अपने सभी भंडार सिंगलेट्स हो सकता है।

2

किसी कारण से संग्रहित किए गए सभी उदाहरण IQueryable या IENumerable के रूप में संग्रह का पर्दाफाश करते हैं। ईएफ 4 में इस उद्देश्य के लिए एक इंटरफेस है - IObjectSet (या आईडीबीसेट अगर आप नवीनतम सीटीपी का उपयोग कर रहे हैं)।

जूली Lerman यह कर, एक MockSet कि IObjectSet लागू करता है बनाने सहित पर एक जबरदस्त पोस्ट है, तो आप कुछ कट इकाई परीक्षण

http://thedatafarm.com/blog/data-access/agile-entity-framework-4-repository-part-6-mocks-amp-unit-tests/

+0

IObjectSet की तरह सीम ईएफ विशिष्ट है और इसलिए मुझे एक भंडार पैटर्न में पसंद नहीं है। प्वाइंट यह है कि आप अपने Irepository ईएफ निर्भरता नहीं चाहते हैं – Gluip

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