0

我们错误地在每个存储库中定义了一个新的 DbContext。所以在开发过程中,我们遇到了很多这样的错误:

An entity object cannot be referenced by multiple instances of IEntityChangeTracker.

因此,我们认为最好的办法是确保我们所有的存储库在每个请求中使用相同的上下文,而不是到处处置。我们最初有一个 NinjectControllerFactory,我们还放置了我们的存储库绑定。我安装了 Ninject.Web.Commons nuget 包,它在 App_Start 中创建了 NinjectWebCommon.cs 文件。

我将绑定全部移至 NinjectWebCommon 文件,并使 NinjectControllerFactory 使用相同的内核。我将我们的 DbContext 类添加为绑定,并为它提供了 InRequestScope 方法。

ninjectKernel.Bind<EfDbContext>().ToSelf().InRequestScope();

每个存储库现在都使用通过构造函数引用上下文。

public class EfPageRepository : IPageRepository
{
    EfDbContext context;

    public EfPageRepository(EfDbContext dbContext)
    {
        this.context = dbContext;
    }
}

现在项目构建良好,但我们仍然遇到与本文开头所述相同的错误。我在这里忘记了一步吗?我真的找不到为什么它不起作用。

4

0 回答 0