使用实体框架模拟存储库

发布于 2024-10-20 11:16:37 字数 925 浏览 0 评论 0原文

我使用 mog 来模拟具有 LINQ to SQL 的存储库,如下所示:

public static IProductsRepository MockProductsRepository(params Product[] prods){
    // Generate an implementer of IProductsRepository at runtime using Moq
    var mockProductsRepos = new Mock<IProductsRepository>();
    mockProductsRepos.Setup(x => x.Products).Returns(prods.AsQueryable());
    return mockProductsRepos.Object;
}

public interface IProductsRepository{
    IQueryable<Product> Products { get; }
    void SaveProduct(Product product);
    void DeleteProduct(Product product);
}

如果我像这样使用它,如何更改实体框架的此函数:

public interface IProductsRepository : IEntities{
    EntityState GetEntryState(object entry);
    void SetEntryState(object entry, EntityState state);
    void Commit();
}

public interface IEntities{
    DbSet<Product> Products { get; set; }
}

现在我正在使用 DbSet

I'm using mog for mocking a repository with LINQ to SQL like this:

public static IProductsRepository MockProductsRepository(params Product[] prods){
    // Generate an implementer of IProductsRepository at runtime using Moq
    var mockProductsRepos = new Mock<IProductsRepository>();
    mockProductsRepos.Setup(x => x.Products).Returns(prods.AsQueryable());
    return mockProductsRepos.Object;
}

public interface IProductsRepository{
    IQueryable<Product> Products { get; }
    void SaveProduct(Product product);
    void DeleteProduct(Product product);
}

How can I change this function for the Entity framework if I am using it like this:

public interface IProductsRepository : IEntities{
    EntityState GetEntryState(object entry);
    void SetEntryState(object entry, EntityState state);
    void Commit();
}

public interface IEntities{
    DbSet<Product> Products { get; set; }
}

Now I am using DbSet.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦中的蝴蝶 2024-10-27 11:16:37

好吧,由于 IProductsRepository 实现了 IEtities,你应该

public DbSet<Product> Products { get; set; }

在其中有一个属性,但我要做的就是向 IProductRepository 添加一个 Fetch 方法 就像

public interface IProductsRepository : IEntities
{
    EntityState GetEntryState(object entry);
    void SetEntryState(object entry, EntityState state);
    void Commit();

    // New method
    IQueryable<Product> FetchAll();
}

然后,在您的 MockProductsRepository 中更改设置行,如下所示:

mockProductsRepos.Setup(x => x.FetchAll()).Returns(prods.AsQueryable());

Well, Since IProductsRepository implements IEntities you should have a

public DbSet<Product> Products { get; set; }

property in there, but what I would do is add a Fetch method to IProductRepository like

public interface IProductsRepository : IEntities
{
    EntityState GetEntryState(object entry);
    void SetEntryState(object entry, EntityState state);
    void Commit();

    // New method
    IQueryable<Product> FetchAll();
}

Then, in your MockProductsRepository change the setup line as follows:

mockProductsRepos.Setup(x => x.FetchAll()).Returns(prods.AsQueryable());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文