用泛型和约束重写虚拟方法
本文关键字:虚拟 方法 重写 约束 泛型 | 更新日期: 2023-09-27 18:21:47
我正在尝试覆盖DbContext.Set<TEntity>()
方法。
它的签名是:
public virtual DbSet<TEntity> Set<TEntity>() where TEntity : class
首先我尝试了这个:
public override DbSet<TEntity> Set<TEntity>()
{
return base.Set<TEntity>();
}
但我得到了错误:
类型"TEntity"必须是引用类型,才能将其用作泛型类型或方法"System.Data.Entity.DbContext.Set()"中的参数"TEntiity"
所以我试着把它指定为一个引用类型:
public override DbSet<TEntity> Set<TEntity>() where TEntity: class
{
return base.Set<TEntity>();
}
我现在得到:
重写和显式接口实现方法的约束是从基方法继承的,因此不能直接指定它们。
如果我把它拿走,我又回到了第一个错误。
那么C#编译器希望我做什么呢?
这太蹩脚了。。。我使用的是实体框架6.0.0版本。
在6.0.0中(在CodePlex上挖掘项目历史后,我发现Set<TEntity>()
当时不是virtual
。
遗憾的是,编纂者没有这么说,而是派我四处打听。
无论如何,将Entity Framework更新到6.1.x(其中是virtual
)解决了问题;
Update-Package EntityFramework
你能发布一整节课吗。
以下是我的使用方法,我可以毫无问题地进行编译。
public class MyDBContext : DbContext
{
public override DbSet<TEntity> Set<TEntity>()
{
return base.Set<TEntity>();
}
}
请确保您使用的是最新的实体框架(6.X)