我偶然发现了下一个问题......我有数据库上下文:
// For support unit testing...
public interface IDbContext : IDisposable
{
IQueryable<Hardware> Hardwares { get; }
IQueryable<ProviderHardware> ProviderHardwares { get; }
}
// Real DbContext (EF 4.0, Code First)
public class PrimaryDbContext : DbContext, IDbContext
{
public DbSet<Hardware> Hardwares { get; set; }
public DbSet<ProviderHardware> ProviderHardwares { get; set; }
IQueryable<Hardware> IDbContext.Hardwares
{ get { return Hardwares; } }
IQueryable<ProviderHardware> IDbContext.ProviderHardwares
{ get { return ProviderHardwares; } }
...
}
我尝试获取 ProviderHardwares 表中不存在的所有硬件:
var hardwaresRemoved = db.Hardwares.Where(i => (i.IsAvailable == true) &&
(db.ProviderHardwares.Count(j => j.Article == i.Article) == 0)).ToList();
如果我严格使用 PrimaryDbContext,例如“PrimaryDbContext db = new PrimaryDbContext();” 一切正常。但是如果我隐式使用它“IDbContext db = new PrimaryDbContext();” 我得到一个例外:
无法创建“ConfiguratorMvcApplication.DomainModels.ProviderHardware”类型的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
总结一下,我无法替换 IQueryable 上的 DbSet。在这种情况下我如何使用单元测试?我希望有人已经解决了这个问题......非常感谢!