次の問題に遭遇しました...データベースコンテキストがあります:
// 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 db = new PrimaryDbContext();」のように厳密に PrimaryDbContext を使用する場合 すべて正常に動作します。しかし、暗黙的に「IDbContext db = new PrimaryDbContext();」を使用すると、例外が発生すること:
タイプ 'ConfiguratorMvcApplication.DomainModels.ProviderHardware' の定数値を作成できません。このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされます。
要約すると、IQueryable で DbSet を置き換えることはできません。この場合、ユニットテストをどのように使用できますか? 誰かがこの問題を解決してくれることを願っています... よろしくお願いします!