我正在尝试创建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);
}
}
。
以下是其中一个例子:
GenerateId(string name)
但是,当我尝试使用DbSet
继承自INWatchStandardEntity
的{{1}}时,此编译很好,例如:
using (var context = Application.GetDbContext()) {
context.Nodes.GenerateId<INWatchStandardEntity>("name");
}
我收到以下消息:
&#39;
类型的接收器DbSet<Node>
&#39;不包含&#39; GenerateId&#39;的定义和 最佳扩展方法过载 &#39; NWatchDbSetExtensions.GenerateId(DbSet<INWatchStandardEntity>
,string
)&#39;需要{&lt;DbSet<INWatchStandardEntity>
&#39;
有没有办法让这个和其他扩展方法可用,以便我可以对任何实体实现INWatchStandardEntity的DbSet使用它?
答案 0 :(得分:2)
经过一些实验,这是正确的方法:
public static Int32 GenerateId<TEntity>(this DbSet<TEntity> dbSet, string name)
where TEntity : class, INWatchStandardEntity
{
NWatchObjectType objectType = Common.ToObjectType(dbSet.GetType());
return Common.GetObjectIdFromName(objectType, name);
}