0
我想创建一些DbSet<T>
扩展,其中T
实现INWatchStandardEntity
。实体框架DBSet扩展类型,实现接口
这里是其中之一任何例子:
public static class NWatchDbSetExtensions
{
public static Int32 GenerateId<TEntity>(this DbSet<INWatchStandardEntity> dbSet, string name)
where TEntity : INWatchStandardEntity, new()
{
NWatchObjectType objectType = Common.ToObjectType(dbSet.GetType());
return Common.GetObjectIdFromName(objectType, name);
}
}
编译没有问题,但是,当我尝试在DbSet
从INWatchStandardEntity
继承使用GenerateId(string name)
,例如:
using (var context = Application.GetDbContext()) {
context.Nodes.GenerateId<INWatchStandardEntity>("name");
}
我收到以下消息:
'
DbSet<Node>
“不包含定义‘GenerateId’和 最佳推广方法重载 ‘NWatchDbSetExtensions.GenerateId(DbSet<INWatchStandardEntity>
,string
)’需要类型的接收器”DbSet<INWatchStandardEntity>
“
有没有一种方法,使这个和其他扩展方法可用,以便我可以使用它来抵御实体实现INWatchStandardEntity的任何DbSet?
变化'这DbSet dbSet'到'这个DbSet dbSet' –
Gusman
当我这样做,我得到的消息''TEntity'类型必须是引用类型,以便将其用作通用类型或方法'DbSet'中的参数'TEntity'。 –
blgrnboy