我从数据库生成了 Linq 到实体模型并对其进行了修改 - 我制作了接口:
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; }
}
编辑2:
我的调用方法:
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
应该是这样的才能工作:
class tableName : IValid
{
// implement IValid
}
还要确保班级tableName
实现与方法中使用的相同的 IValid 接口GetValidRecords
,即IValid
来自正确的命名空间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)