[英]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.