के साथ रिपोजिटरी और वर्क पैटर्न के यूनिट का सर्वोत्तम अभ्यास मैं एंटिटी फ्रेमवर्क 6 (कोड फर्स्ट/पीओसीओ) के साथ एएसपी.नेट एमवीसी का उपयोग कर एक वेब एप्लिकेशन विकसित करने की योजना बना रहा हूं। मैं अपने आवेदन में जेनेरिक रिपोजिटरी और वर्क पैटर्न का यूनिट भी उपयोग करना चाहता हूं। यह एप्लिकेशन दो से अधिक डेटाबेस से जुड़ता है, इसलिए मुझे एप्लिकेशन में एकाधिक डीबीकॉन्टेक्स्ट का उपयोग करना होगा।एकाधिक डीबीकॉन्टेक्स्ट
public class ContextOne : DbContext
{
public DbSet<Model_One1>
public DbSet<Model_One2>
}
public class ContextTwo : DbContext
{
public DbSet<Model_Two1>
public DbSet<Model_Two2>
}
public class ContextThree : DbContext
{
public DbSet<Model_Three1>
public DbSet<Model_Three2>
}
public interface IRepository<T> where T : DbContext
{
void Add<T>(T entity) where T : class;
}
public class Repository<T> where T : DbContext
{
void Add<T>(T entity) where T : class
{
//T is DbContext and Model. So confusing
}
}
public interface IUnitOfWork<IRepository>
{
}
public class UnitOfWork<IRepository>
{
//IRepository contains more than one DbContext how can I initiate them here?
}
//in application should look like this
public class BaseController : Controller
{
protected IRepository repository = new .. //here I have no idea with multiple DbContext
}
public class HomeController : BaseController
{
public ActionResult Add(Model_Two2 model)
{
base.repository.Add<Model_Two2>(model)
}
}
अगर मैं IRepository और IUnitOfWork नियंत्रक से फोन कैसे मैं मिलान संदर्भ पता कर सकते हैं? इस समस्या का सबसे अच्छा अभ्यास क्या है?
मुझे अपने बेसकंट्रोलर में आईआरपॉजिटरी और IUnitOfWork को कैसे कॉल करना चाहिए? क्या मुझे प्रत्येक मॉडल के लिए सैकड़ों आईरिपोजिटरी इंस्टेंस बनाना चाहिए? उदाहरण के लिए, 'आईरिपोजिटरी रिपोजिटरी स्टूडेंट = नया रिपोजिटरी() 'आदि, आदि –
derodevil
मुझे नहीं लगता कि' बेसकंट्रोलर 'यूओडब्ल्यू शुरू करने के लिए सही जगह होगी। इसके बजाय इसे आपके व्यावसायिक प्रक्रिया स्तर पर मांग के आधार पर बनाया जाना चाहिए। तो आवश्यक आधार के अनुसार डीबी कॉन्टैक्स से बाहर विशिष्ट यूओडब्ल्यू बनाएं और फिर विशिष्ट भंडार प्राप्त करें। – ramiramilu
चूंकि आपके 'यूनिटऑफवर्क' में विनाशक और अप्रबंधित संसाधन नहीं हैं, इसलिए आपको 'GC.SuppressFinalize (this) 'को कॉल करने की आवश्यकता नहीं है और निपटान पैटर्न को लागू करने की आवश्यकता नहीं है। आपको 'Unitconfork.Dispose' में केवल' _context.Dispose() 'को कॉल करने की आवश्यकता है – Albert