我试图覆盖DbContext.Set<TEntity>()
method。
它的签名是:
public virtual DbSet<TEntity> Set<TEntity>() where TEntity : class
首先我尝试了这个:
public override DbSet<TEntity> Set<TEntity>()
{
return base.Set<TEntity>();
}
...但我收到错误:
类型&#39; TEntity&#39;必须是参考类型才能将其用作参数&#39; TEntity&#39;在泛型类型或方法中#System; Data.Entity.DbContext.Set()&#39;
...所以我尝试指定它是一个引用类型:
public override DbSet<TEntity> Set<TEntity>() where TEntity: class
{
return base.Set<TEntity>();
}
......我现在得到:
覆盖和显式接口实现方法的约束是从base方法继承的,因此不能直接指定它们。
......如果我拿走它,我会回到第一个错误。
那么C#编译器要我做什么?
答案 0 :(得分:8)
这很蹩脚......我使用的是6.0.0版的Entity Framework。
在6.0.0中(在挖掘history of the project on Code Plex之后,我发现Set<TEntity>()
不是 virtual
返回然后
羞辱编译器不能这么说,而不是把我送到房子周围。
无论如何,将实体框架更新到6.1.x(其中是 virtual
),解决了问题;
Update-Package EntityFramework
答案 1 :(得分:1)
请你发一整课。
以下是我的使用方法,我可以毫无问题地编译。
public class MyDBContext : DbContext
{
public override DbSet<TEntity> Set<TEntity>()
{
return base.Set<TEntity>();
}
}
请确保您使用的是最新的Entity Framework(6.X)