簡體   English   中英

實現接口的類型的實體框架DBSet擴展

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM