DbSetT <t> vs IDbSet <t> </t> </t>

时间:2014-02-15 12:23:23

标签: entity-framework unit-testing inversion-of-control entity-framework-6

最近,我已经要求让我的DbContext模型可以模拟。

但是,目前定义如下:

public MyDbContext : DbContext
{
    public DbSet<Employee> Employees {get;set;}
}

我正在考虑将其抽象为:

public interface IMyDbContext
{
    IDbSet<Employee> Employees {get;set;}
}

public MyDbContext : DbContext, IMyDbContext
{
    IDbSet<Employee> Employees {get;set;}
}

如果我在MyDbContext实现中将DbSet与IDbSet交换,我会失去任何东西吗?

1 个答案:

答案 0 :(得分:1)

我认为模拟和真实数据库对象应该共享相同的接口。这样,您可以在不影响客户端的情况下更换数据库实现。模拟也更容易。面向方面编程更容易。我想不出一个很好的理由用接口启动它们。