创建通用dbcontext类的错误。

时间:2015-02-12 16:05:12

标签: c# entity-framework generics dbcontext generic-list

我正在尝试构建一个静态dbcontext类,用于我的核心dll,

班级定义......

public static class dbContext
{
    public static T Execute(Func<otherLib.dbContext, T> f)
    {
        using (var db = new otherLib.dbContext())
            return f(db);
    }

    public static IEnumerable<T> Execute(Func<otherLib.dbContext, T> func)
    {
        using (var db = new otherLib.dbContext())
            return f(db);
    }
}

我想使用这个通常有时返回一个类型的项目,其他时候返回一个列表因此重载......

目前

用法

    protected List<otherLib.foo1s> foo1;
    protected List<otherLib.foo2s> foo2;
    protected List<otherLib.foo3s> foo3;
            foo1 = dbContext.Execute(db => db.foo1s);
            foo2 = dbContext.Execute(db => db.foo2s);
            foo3 = dbContext.Execute(db => db.foo3s);

目前我得到标准错误T,当然重复几次......

Error   6   The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?) 

任何人都可以看到我出错的地方......

1 个答案:

答案 0 :(得分:0)

这种方法存在很大缺陷。对于编译器,您需要在某处添加类型参数:

public static T Execute<T>(Func<otherLib.dbContext, T> f)
{
    using (var db = new otherLib.dbContext())
        return f(db);
}

即便如此,您的方法签名也是一样的,您将收到错误消息。

我不知道你如何有效地使用这种方法,我会对通用存储库做一些研究,如果这就是你所追求的。