在Entity Framework 5中创建模拟上下文时遇到问题

时间:2013-05-06 12:20:58

标签: c# entity-framework-5

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

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

我想嘲笑它。

我创建了另一个实现我所谓的IContext接口的部分类。

我必须加入这个界面

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

然后我可以创建一个模拟器,每个人都很开心。

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

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

1 个答案:

答案 0 :(得分:2)

有办法。

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

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

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

public interface IContext
{
   IDbSet<T> Set<T>();
}

您可以使用

进行查询
var query = dbContext.Set<Cat>().Where(....)

这样你就可以“嘲笑”它了。