模拟 DbContext.Set()?
我们首先使用 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 功能?
We're using EF Code first, and have a data context for our sales database. Additionally, we have a class that sits on top of our data context and does some basic CRUD operations.
For example, we have the following function:
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 an example of how to create fake contexts and IDBset properties. I started implementing that, but I ran in to an issue.
We use dc.Set() quite liberally (as seen above) in our code, as we attempt to create generic CRUD methods. Instead of having a ReadCustomer, ReadContact etc, we would just do Read(). However, dc.Set returns a DbSet, not an IDbSet, so I'm not able to mock that.
Has anyone been able to mock or fake DbContext and still use the Set functionality?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我使用了不同的名称,但如果您希望隐藏常规实现,则可以使用 new 运算符。
I used a different name, but you can use the
new
operator if you prefer to hide the regular implementation.