я наткнулся на следующую проблему ... У меня есть контекст базы данных:
// 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) поддерживаются в
этот контекст.
Подводя итог, я не могу заменить DbSet на IQueryable. И как я могу использовать модульное тестирование в этом случае? Я надеюсь, что кто-то решил эту проблему еще ...
Заранее большое спасибо!