我正在尝试创建一些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
,例如:
using (var context = Application.GetDbContext()) {
context.Nodes.GenerateId<INWatchStandardEntity>("name");
}
我收到以下消息:
'
DbSet<Node>
' does not contain a definition for 'GenerateId' and the best extension method overload 'NWatchDbSetExtensions.GenerateId(DbSet<INWatchStandardEntity>
,string
)' requires a receiver of type 'DbSet<INWatchStandardEntity>
'
有没有办法使此方法和其他扩展方法可用,以便我可以将其用于实体实现 INWatchStandardEntity 的任何 DbSet?
最佳答案
经过一些实验,以下是正确的方法:
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);
}
关于c# - 实现接口(interface)的类型的 Entity Framework DBSet 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37174442/