c# - Orchard IRepository 与 Linq to SQL

标签 c# linq-to-sql orchardcms irepository

在 Orchard CMS 中使用 IRepository<>很常见。

所以我问自己,使用 IRepository<> 有什么好处?及其 Fetch()方法而不是简单地使用 Linq to SQL查询数据?

IRepository<>

Repository.Fetch(r => r.ID == 1234).Select(r => r.Name)

这里的缺点是我必须在构造函数中注入(inject)存储库。

Linq 到 SQL

from r in Repository where r.ID == 1234 select r.Name

最佳答案

通常,存储库是数据访问代码之上的抽象。您可能有多个 IRepository 接口(interface)的实现,一个使用 LINQ to SQL 作为数据访问技术,另一个使用 Raw ADO.NET 或另一个使用 XML 文件作为数据存储。使用此存储库抽象,您访问数据的前端代码(例如:repository.GetCustomer(someId))保持不变。我们可以根据需要简单地切换实现。

有了这种抽象,您就可以为代码编写单元测试。您只需要创建 IRepository 的模拟实现。您可以使用像 Moq 这样的模拟库来实现这一点。

使用 Moq 的单元测试代码的快速示例

var repo= new Mock<IRepository>();
var dummyCustomer = new Customer { Name ="Test"}
repo.Setup(s=>s.GetCustomer(It.IsAny<int>).Returns();

var customerMgr = new CustomerManager(repo.Object);
var actualResult = customerMgr.GetCustomer(345);

//Assert something now.

在这里当你运行你的单元测试时,它不会命中数据库,而是返回 dummyCustomer

关于c# - Orchard IRepository 与 Linq to SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33633474/

相关文章:

c# - Orchard 文本编辑器无法保存我的HTML

ASP.Net CMS 推荐,Orchard、Sitefinity、Umbraco 还是 N2?

c# - 使用 Vector3.Distance 的性能问题

asp.net - 存储库模式和 Linq to sql

c# - 使用 linq-to-sql 删除记录列表

C# LINQ to SQL : Refactoring this Generic GetByID method

c# - 通用冒泡排序扩展

javascript - SignalR 服务 : Get message depending on user role

c# - 在 OData WebApi Url 中传递参数

orchardcms - Orchard CMS ASP .NET MVC 到 Core MVC