繁体   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