ASP.NET MVC kullanarak Entity Framework 6 (Kod İlk/POCO) ile bir web uygulaması geliştirmeyi planlıyorum. Ayrıca, başvurumda genel Depo ve Çalışma Düzeni'ni kullanmak istiyorum. Bu uygulama ikiden fazla veritabanına bağlanır, bu yüzden uygulamada birden çok DbContext kullanmam gerekir.Çoklu DbContext ile Çalışma Kalıbı ve Çalışma Kalıbının En İyi Uygulaması
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)
}
}
ben eşleşen bağlamı bilebilir nasıl Denetleyicisi'nden IRepository ve IUnitOfWork ararsanız? Bu sorunun en iyi pratiği nedir?
BaseController'ımda IRepository ve IUnitOfWork'u nasıl aramalıyım? Her model için yüzlerce Dozlama örneği oluşturmalı mıyım? Örneğin, 'İpi deposu' Student = new Deposu() 'vb, vb. –
derodevil
" BaseController "ın bir UoW başlatmak için doğru yer olacağını sanmıyorum. Bunun yerine, iş süreci seviyenizde talep bazında oluşturulmalıdır. Bu nedenle, gereksinim esasına göre DbContexts temelli özel UoW oluşturun ve ardından belirli depoları edinin. – ramiramilu
'UnitOfWork'unuzda bir yok edici ve yönetilmeyen kaynak bulunmadığından' GC.SuppressFinalize (this) 'olarak adlandırmak zorunda kalmazsınız ve atma düzenini uygulamak zorunda kalmazsınız. UnitOfWork.Dispose'da sadece '_context.Dispose()' i çağırmanız gerekir – Albert