2

我有我的上下文,其中包含以下内容:

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

我想嘲笑它。

我创建了另一个部分类,它实现了我制作的名为IContext.

我必须放入这个界面

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

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

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

我不确定如何继续创建模拟上下文。有任何想法吗?

4

1 回答 1

2

有一种方法。

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

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(....)

这样你就可以毫无问题地“模拟”它。

于 2013-05-06T12:35:11.447 回答