[英]Entity Framework DBSet Extensions for type that implements an interface
我正在尝试创建一些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
上使用GenerateId(string name)
,这可以DbSet
进行INWatchStandardEntity
,例如:
using (var context = Application.GetDbContext()) {
context.Nodes.GenerateId<INWatchStandardEntity>("name");
}
我收到以下消息:
'
DbSet<Node>
'不包含'GenerateId'的定义,最佳扩展方法重载'NWatchDbSetExtensions.GenerateId(DbSet<INWatchStandardEntity>
,string
)'需要类型为'DbSet<INWatchStandardEntity>
的接收器
有没有一种方法可以使此方法和其他扩展方法可用,以便我可以在Entity实现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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.