在实体框架5中创建模拟上下文时遇到麻烦

本文关键字:上下文 遇到 麻烦 模拟 创建 实体 框架 | 更新日期: 2023-09-27 18:12:29

我有我的上下文,它包含如下内容:

public partial class MyEntities : DbContext
{
    ...
    public DbSet<Cat> Cats { get; set; }
}

我想嘲笑它。

我创建了另一个分部类,它实现了我创建的一个名为IContext的接口。

我必须输入这个接口

public interface IContext
{
    DbSet<Cat> Cats { get; set; }
}

然后我可以创建一个模拟,每个人都很高兴。

除非我不想在我的接口中使用DbSet<Cat>。这似乎是错误的,因为我不会使用数据库。有没有办法改变它,或者有更好的解决方案?显然,上下文是从模板自动生成的,所以我不能编辑它,而不会在生成时丢失。

我真的不确定如何继续创建模拟上下文。什么好主意吗?

在实体框架5中创建模拟上下文时遇到麻烦

有办法的。

你可以返回IDbSet而不是DbSet,然后在模拟设置中,你可以提供模拟的IDbSet作为在你的模拟IContext中的猫属性的返回值。

public interface IContext
{
  IDbSet<Cat> Cats{get;set;}
}
public partial class MyEntities : DbContext , IContext
{
    public IDbSet<Cat> Cats { get; set; }
}

但也许更好的是,在你的接口中不要为每个实体类引入属性。相反,IDbContext只能是:

public interface IContext
{
   IDbSet<T> Set<T>();
}
可以用 查询的

var query = dbContext.Set<Cat>().Where(....)

这样的话,"mock"它应该没有问题。