我產生的LINQ -to從數據庫-entity模型和改進它的隱式引用轉換 - 我所做的接口:類型''不能用作泛型類型或方法''中的類型參數'T'。有一個從「」到「」
public interface IValid
{
byte Valid{ get; set; }
}
,並提出一些生成的類繼承這個接口。
我寫的泛型類從數據庫訪問表:
public List<T> GetValidRecords<T>() where T: class, IValid
{
try
{
return _context.Set<T>().Where(x => x.Valid == 1).ToList();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
當我在我的單元測試調用此方法
var records = repositary.GetValidRecords<tableName>();
我得到的錯誤 -
的類型'tableName'不能用作泛型類型或方法'GetValidRecords()'中的類型參數'T'。沒有從'tableName'到'IValid'的隱式引用轉換。
如何解決?
編輯: 我的表類:
public partial class tableName: IValid {
public byte IsValid { get; set; }
}
EDIT2: 我的調用方法:
public void GetValidRecordsGenericTest()
{
var data = new List<tableName>
{
new tableName() {Valid = 1},
new tableName() {Valid = 1}
}.AsQueryable();
var mockSet = new Mock<DbSet<tableName>>();
mockSet.As<IQueryable<tableName>>().Setup(m => m.Provider).Returns(data.Provider);
mockSet.As<IQueryable<tableName>>().Setup(m => m.Expression).Returns(data.Expression);
mockSet.As<IQueryable<tableName>>().Setup(m => m.ElementType).Returns(data.ElementType);
mockSet.As<IQueryable<tableName>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator()); var mockContext = new Mock<Entities>();
mockContext.Setup(x => x.tableNames).Returns(mockSet.Object);
var database = new Database(mockContext.Object);
var records = database.GetValidRecords<tableName>(); // here I get error
Assert.AreEqual(2, records.Count, "Wrong number of gueltig records.");
}
確保'tableName'是實現IValid的類型的名稱。 – helb
@helb您應該將其作爲答案張貼,因爲這是答案。 :) – aevitas
@helb我的表執行此接口 – Sasha