c# - 实现接口(interface)的类型的 Entity Framework DBSet 扩展

标签 c# .net entity-framework generics

我正在尝试创建一些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);
    }
}

但是,当我尝试使用 GenerateId(string name) 时,编译效果很好。在DbSet上继承自 INWatchStandardEntity ,例如:

using (var context = Application.GetDbContext()) {
    context.Nodes.GenerateId<INWatchStandardEntity>("name"); 
}

我收到以下消息:

'DbSet<Node>' does not contain a definition for 'GenerateId' and the best extension method overload 'NWatchDbSetExtensions.GenerateId(DbSet<INWatchStandardEntity>, string)' requires a receiver of type 'DbSet<INWatchStandardEntity>'

有没有办法使此方法和其他扩展方法可用,以便我可以将其用于实体实现 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);
}

关于c# - 实现接口(interface)的类型的 Entity Framework DBSet 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37174442/

相关文章:

c# - c# 是否有 VB.NET 等效的速记数组声明,如 {"string1","string2"}?

c# - 获取 JSON 响应的选定值 c#

c# - 如何从基类型中声明的方法返回派生类型

.net - .NET 中类加载器的等效项

sql - 如何让 INotifyPropertyChanged 从存储在 SQL 中的列表中更新绑定(bind)项目?

c# - 如何解决CA2202 :To avoid generating a System. ObjectDisposeException警告

c# - 使用 gmail 发送电子邮件。错误 : The server response was: 5. 5.1 需要身份验证

c# - 生成串联的 SMS UDH 并将其添加到消息文本中

entity-framework - Entity Framework 自引用分层多对多

c# - 连接字符串中的 %APPDATA% 未替换为实际文件夹?