10

我们首先使用 EF 代码,并为我们的销售数据库提供数据上下文。此外,我们有一个类位于我们的数据上下文之上并执行一些基本的 CRUD 操作。

例如,我们有以下功能:

public static T Create<T>(int userId, T entity) where T : class, IAllowCreate
{
    if (entity == null)
        throw new ArgumentNullException("entity");

    using (SalesContext dc = new SalesContext())
    {
         dc.Set<T>().Add(entity);
         dc.SaveChanges();

         return entity;
    }
}

我找到了一个如何创建假上下文和 IDBset 属性的示例。我开始实施它,但遇到了一个问题。

当我们尝试创建通用 CRUD 方法时,我们在代码中非常自由地使用 dc.Set()(如上所示)。我们只需要 Read(),而不是 ReadCustomer、ReadContact 等。但是,dc.Set 返回一个 DbSet,而不是一个 IDbSet,所以我无法模拟它。

有没有人能够模拟或伪造 DbContext 并仍然使用 Set 功能?

4

1 回答 1

11
interface ISalesContext
{
    IDbSet<T> GetIDbSet<T>();
}

class SalesContext : DbContext, ISalesContext
{
    public IDbSet<T> GetIDbSet<T>()
    {
        return Set<T>();
    }
}

I used a different name, but you can use the new operator if you prefer to hide the regular implementation.

于 2011-02-15T17:37:09.590 回答