gpt4 book ai didi

c# - 使用 VS2013、Entity Framework 6 和 WebAPI 2 时,使用通用存储库和 UoW 框架是否矫枉过正?

转载 作者:太空狗 更新时间:2023-10-30 01:36:17 27 4
gpt4 key购买 nike

我正在重新检查我对 generic unit of work and repository framework 的实现.

我正在使用 EF6 和 VS2013。因此,VS 包含 WebAPI Controller 模板,可使用如下 Entity Framework 代码自动生成带有操作的 WebAPI 2 OData Controller :

// GET odata/UserProjects(5)/WebsiteRequiredKeywords
[Queryable]
public IQueryable<WebsiteRequiredKeyword> GetWebsiteRequiredKeywords([FromODataUri] int key)
{
return _db.Websites.Where(m => m.WebsiteId == key).SelectMany(m => m.WebsiteRequiredKeywords);
}

protected override void Dispose(bool disposing)
{
if (disposing)
{
_db.Dispose();
}
base.Dispose(disposing);
}

private bool WebsiteExists(int key)
{ . . .

在看CustomerController class in the sample code - VS2013 模板中自动生成的代码看起来非常熟悉。如果我使用的是通用框架,我将不得不重构自动生成的代码以使用通用存储库语法,修改构造函数等。虽然我确信有一种方法可以修改模板生成过程以符合到这个通用存储库(或将我们自己的模板添加到 VS 模板)——这些工作量似乎是不必要的。

通用脚手架模板使用相同的数据库上下文。据我了解,这是工作单元模式的同义词。

我现在正试图找到必须执行任何这些额外工作的值(value)。虽然我已经在以前的项目中成功地使用了通用存储库和工作单元模式,但对于新项目来说,它是否只是比它的值(value)更多的工作(因为有一些概念重复 b/t EF 和这个模式也是如此)?

-- 更新--

通过对自动生成的代码进行一些小的修改,在实现这样的代码之后我需要做什么:

public class ProjectEditorController : ODataController
{
//private MyDatabaseNameContext db = new MyDatabaseNameContext(); // auto-generated code

private DbContext _db;

public ProjectEditorController(DbContext dbContext)
{
_db = dbContext;
}
. . .

这段代码的问题是现在没有具体的上下文,并且做的事情如下:

return SingleResult.Create(_db.Websites.Where(website => website.WebsiteId == key));

...将不起作用,因为 db 和实体之间没有具体链接,即。 网站

在使用DI for WebAPI Controllers ,您仍然必须定义一个存储库。在这种情况下,如果我想注入(inject) dbContext,我需要使用通用存储库吗?

简而言之,这是否准确:如果您想有效地使用依赖注入(inject),那么您需要一个通用存储库。否则,您需要为所有 EF 实体定义一个存储库接口(interface),除非您使用 IDependency 解析器,如 this 末尾所建议的那样文章。

最佳答案

Ayende 总结得很好 here .不要添加不需要的抽象。

关于c# - 使用 VS2013、Entity Framework 6 和 WebAPI 2 时,使用通用存储库和 UoW 框架是否矫枉过正?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22642512/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com