相关疑难解决方法(0)

EF和存储库模式 - 在一个控制器中以多个DbContexts结束 - 任何问题(性能,数据完整性)?

我对ASP.NET MVC 3的大部分知识来自阅读Adam Freeman和Steven Senderson撰写的Pro ASP.NET MVC 3 Framework一书.对于我的测试应用程序,我试图非常密切地坚持他们的例子.我正在使用存储库模式加上Ninject和Moq,这意味着单元测试工作得很好(即无需从数据库中提取数据).

在本书中,存储库的使用方式如下:

public class EFDbTestChildRepository
{
    private EFDbContext context = new EFDbContext();

    public IQueryable<TestChild> TestChildren
    {
        get { return context.TestChildren; }
    }

    public void SaveTestChild(TestChild testChild)
    {
        if (testChild.TestChildID == 0)
        {
            context.TestChildren.Add(testChild);
        }
        else
        {
            context.Entry(testChild).State = EntityState.Modified;
        }
        context.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是与之相关的DbContext:

public class EFDbContext : DbContext
{
    public DbSet<TestParent> TestParents { get; set; }
    public DbSet<TestChild> TestChildren { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

请注意:为了简化这个提取的例子,我在这里省略了接口ITestChildRepository,然后Ninject会使用它.

在其他来源中,我看到了一个更通用的存储库方法,其中一个存储库足以满足整个应用程序的需要.显然在我的情况下,我最终在我的应用程序中列出了相当多的存储库列表 - 基本上我的域模型中的每个实体都有一个.不确定这两种方法的优缺点 - 我只是按照这本书的安全性来做.

最后得到我的问题:每个存储库都有自己的DbContext …

repository-pattern entity-framework-4 asp.net-mvc-3 dbcontext

8
推荐指数
2
解决办法
6721
查看次数

N层应用程序中的多个DbContexts

我正在创建我的第一个N-Tier MVC应用程序,并且我遇到了如何DbContexts使用我的数据库第一种方法来管理多个的路障.

我有以下几层

Presentation
Service (WCF)
Business
Data Access
Run Code Online (Sandbox Code Playgroud)

我不想在我的服务层中使用实体框架引用,但是我没有看到如何创建接口或管理两个上下文的东西.我让它在IDatabaseFactory中使用单个上下文,但我似乎无法找到管理两个的方法.

下面是我UnitOfWork在我的服务ctor中创建的,但我看待它的每一种方式我仍然依赖于它SiteModelContainer,而实际上我有另一个上下文.

public class UnitOfWork : IUnitOfWork
    {
        private SiteModelContainer _context;

        private readonly IDatabaseFactory _databaseFactory;

        protected SiteModelContainer SiteContext
        {
            get { return _context ?? (_context = _databaseFactory.Get()); }
        }

        public UnitOfWork(IDatabaseFactory factory)
        {
            _databaseFactory = factory;
            _context = _databaseFactory.Get();
        }
        //More code
    }



public class DatabaseFactory : Disposable, IDatabaseFactory
{
    private SiteModelContainer _dataContext;

    public SiteModelContainer Get()
    {
        return _dataContext ?? (_dataContext = new SiteModelContainer());
    } …
Run Code Online (Sandbox Code Playgroud)

c# repository unit-of-work entity-framework-4.1 dbcontext

7
推荐指数
1
解决办法
1万
查看次数