【发布时间】:2016-05-11 22:39:44
【问题描述】:
我正在尝试创建一些 DbSet<T> 扩展,其中 T 实现 INWatchStandardEntity。
以下是其中之一的任何示例:
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);
}
}
但是,当我尝试在继承自 INWatchStandardEntity 的 DbSet 上使用 GenerateId(string name) 时,这编译得很好,例如:
using (var context = Application.GetDbContext()) {
context.Nodes.GenerateId<INWatchStandardEntity>("name");
}
我收到以下消息:
“
DbSet<Node>”不包含“GenerateId”的定义,并且 最佳扩展方法重载 'NWatchDbSetExtensions.GenerateId(DbSet<INWatchStandardEntity>,string)' 需要类型为 'DbSet<INWatchStandardEntity>' 的接收器
有没有办法使此扩展方法和其他扩展方法可用,以便我可以将它用于 Entity 实现 INWatchStandardEntity 的任何 DbSet?
【问题讨论】:
-
将
this DbSet<INWatchStandardEntity> dbSet更改为this DbSet<TEntity> dbSet -
当我这样做时,我收到消息“类型 'TEntity' 必须是引用类型才能将其用作泛型类型或方法 'DbSet
中的参数'TEntity' ' '。
标签: c# .net entity-framework generics