0
我想創建一些DbSet<T>
擴展,其中T
實現INWatchStandardEntity
。實體框架DBSet擴展類型,實現接口
這裏是其中之一任何例子:
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);
}
}
編譯沒有問題,但是,當我嘗試在DbSet
從INWatchStandardEntity
繼承使用GenerateId(string name)
,例如:
using (var context = Application.GetDbContext()) {
context.Nodes.GenerateId<INWatchStandardEntity>("name");
}
我收到以下消息:
'
DbSet<Node>
「不包含定義‘GenerateId’和 最佳推廣方法重載 ‘NWatchDbSetExtensions.GenerateId(DbSet<INWatchStandardEntity>
,string
)’需要類型的接收器」DbSet<INWatchStandardEntity>
「
有沒有一種方法,使這個和其他擴展方法可用,以便我可以使用它來抵禦實體實現INWatchStandardEntity的任何DbSet?
變化'這DbSet dbSet'到'這個DbSet dbSet' –
Gusman
當我這樣做,我得到的消息''TEntity'類型必須是引用類型,以便將其用作通用類型或方法'DbSet'中的參數'TEntity'。 –
blgrnboy