0

这里我的代码类的某些部分 NinjectWebCommon需要绑定数据上下文。它只是一段代码,而不是完整的类。

private static void RegisterServices(IKernel kernel)
        {
            kernel.BindSharpRepository();
            RepositoryDependencyResolver.SetDependencyResolver(new NinjectDependencyResolver(kernel));

            kernel.Bind<DbContext>().To<EntitiesDbOne>().InRequestScope();

        //kernel.Bind<DbContext>().To<EntitiesDbTwo>().InRequestScope();
    }  

我需要同时拥有两个数据库的类别存储库类

public class CategoryRepository : ConfigurationBasedRepository<CategoryData, int>, ICategoryRepository
    {
    private readonly EntitiesDbOne _ctxOne;
        private readonly EntitiesDbTwo _ctxTwo;

    public CategoryRepository(EntitiesDbOne ctxOne, EntitiesDbTwo ctxTwo)
        {
            _ctxOne= ctxOne;
            _ctxTwo= ctxTwo;
        }

    public CategoryData GetById(int Id)
        {
             //dummy data, just for usage two different dcContexts
             var category = _ctxOne.Categories.Include((string) (x => x.MetaTags)).FirstOrDefault(x => x.Id == Id);
             var categoryName = _ctxTwo.category.FirstOrDefault(x => x.Id == category.Id);

            return category;
        }

在我的项目中,我使用 SharpRepository(ConfigurationBasedRepository) 并使用 UnitOfWork。我想我可以跳过 UnitOfWork,因为 EntityFramework 正在做所有这些(UnitOfWork 模式)工作。数据库的展位是 EntityFramework 一个是 CodeFirst 方法 其他 (DbTwo) modelFirst

public class EntitiesDbOne : DbContext
    {
        public DbSet<CategoryData> Categories { get; set; }
}

public partial class EntitiesDbTwo: DbContext
    {
        public EntitiesDbTwo()
            : base("name=EntitiesDbTwo")
        {
        }

        public DbSet<attributenames> attributenames { get; set; }
        public DbSet<category> category { get; set; }
}

请给我一些我可以使用的示例的链接,我认为我不能通过简单的解释来解决这个问题。在我写这个问题之前,我已经在 N-Tier Application 中的 Multiple DbContexts上搜索了答案

EF 和存储库模式 - 最终在一个控制器中使用多个 DbContexts - 任何问题(性能、数据完整性)?

这个问题的名称在我的情况下是完整的,但对我来说,代码却大不相同。 具有 Repository、UnitOfWork 和 Ninject 的多个 dbcontexts

这是多个数据库,但每个请求使用一个,我需要在同一个请求中使用两个数据库。 http://blog.staticvoid.co.nz/2012/1/9/multiple_repository_data_contexts_with_my_repository_pattern 网站和其他地方。

我阅读了大约 20 条建议,其中有两条接近我的情况,但可能还不够。

4

1 回答 1

0

只是作为讨论的基础:

如果你使用:

kernel.Bind<EntitiesDbOne>().ToSelf().InRequestScope();
kernel.Bind<EntitiesDbTwo>().ToSelf().InRequestScope();

并像使用它一样

public class CategoryRepository : ConfigurationBasedRepository<CategoryData, int>,    ICategoryRepository
{

    public CategoryRepository(EntitiesDbOne ctxOne, EntitiesDbTwo ctxTwo)
    {
    }
}

那有什么问题呢?

于 2014-08-03T06:34:04.747 回答