繁体   English   中英

在实体框架中正确实现UnitOfWork和存储库模式

[英]Correct implementation of UnitOfWork and Repository pattern in Entity Framework

我试图弄清楚如何使用实体框架正确实现UoW和存储库模式。 我看到了很多反对它的文章,但它似乎仍然是正确的方法。

根据此博客文章,我正在尝试这样做。 我要弄清楚的最后一件事是如何将存储库注入到UoW中,但这种方式可以让我按需进行。 存储库的数量可能会增加,然后构造函数也会增加。 此外,为可能只需要1或2的操作实例化所有存储库似乎是对资源的浪费。

如何以一种使我相当容易地编写单元测试的方式来做到这一点?

我发现的唯一方法是,让我不在构造函数中注入存储库(因此即使在特定操作不需要它们时也不会实例化所有存储库)是通过在getter中进行操作:

private IGenericRepository<Blog> _blogRepository;
private IGenericRepository<Post> _postRepository;
public UnitOfWork(BloggingContext bloggingContext)
{
    _bloggingContext = bloggingContext;
}

public IGenericRepository<Blog> BlogRepository
{
    get
    {
        return _blogRepository = _blogRepository ?? new GenericRepository<Blog>(_bloggingContext);
    }
}

但是,这种方法在代码中产生了很多噪音,因为当我有50个存储库时,我将需要50个道具。

您可能希望将描述的方法(我喜欢)与此处描述的通用存储库方法结合使用https://cpratt.co/truly-generic-repository/鉴于您所引用的博客文章中的UoW模式得到了适当的实现,您将赢得除了文章中的IReadOnlyRepository之外,不需要任何其他内容-它会为您提供存储库所需的一切。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM