我们首先使用 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;
}
}
I found 的一个例子如何创建假上下文和 IDBset 属性。我开始实施它,但遇到了一个问题。
当我们尝试创建通用的 CRUD 方法时,我们在代码中相当自由地使用 dc.Set()(如上所示)。我们只需执行 Read(),而不是使用 ReadCustomer、ReadContact 等。但是,dc.Set 返回一个 DbSet,而不是 IDbSet,所以我无法模拟它。
有没有人能够模拟或伪造 DbContext 并且仍然使用 Set 功能?
interface ISalesContext
{
IDbSet<T> GetIDbSet<T>();
}
class SalesContext : DbContext, ISalesContext
{
public IDbSet<T> GetIDbSet<T>()
{
return Set<T>();
}
}
我使用了不同的名称,但您可以使用new
如果您想隐藏常规实现,请使用运算符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)