9

我有一个使用 mvc-mini-profiler 的 asp.net 项目。我使用的是 1.7 版的 NuGet 包,我注意到有一个更新的包,其版本是 1.9。我更新了包,现在我的代码不再编译。编译失败的代码是:

public static T GetProfiledContext<T>() where T : System.Data.Objects.ObjectContext
{
    var conn = GetStoreConnection<T>();
    if (_enableProfiling)
    {
        conn = ProfiledDbConnection.Get(conn);
    }
    return ObjectContextUtils.CreateObjectContext<T>(conn);
}

编译错误报告以下问题:

  • “MvcMiniProfiler.Data.ProfiledDbConnection”不包含“Get”的定义。
  • 当前上下文中不存在名称“ObjectContextUtils”。

我注意到我可以创建一个 ProfiledDbConnection 实例并将连接和一个 IDbProfiler 类型的对象传递给它,但我不确定应该如何获取该对象。

关于 ObjectContextUtils,我不知道应该使用什么。

我该如何解决这些问题?


更新:

通过遵循@monkeychatter 的建议,我设法构建了代码。我现在得到以下运行时异常:

在“MvcMiniProfiler.Data.ProfiledDbConnection”类型的商店提供程序实例上调用“get_ProviderFactory”方法后返回 null。商店提供程序可能无法正常运行。

通过检查 ILSpy 中的 ProfiledDbConnection,我注意到它不再覆盖 DbProviderFactory。这似乎是错误的原因,因为基本实现返回 null。有没有人能够解决这个问题?

4

1 回答 1

12

我刚刚经历了同样的事情,不幸的是,大多数/所有文档都显示了“旧”方式。此功能的大部分已移至 ProfiledDbConnection 类本身。要在 ProfiledDbConnection 上获取 ObjectContext 扩展,您还需要从 nuget 包“MiniProfiler.EF”中引用一个程序。以下是在 1.9 中获得等效代码的编辑。

//reference extension from MvcMiniProfiler.Data
using MvcMiniProfiler.Data;

var conn = GetStoreConnection<T>();   
if (_enableProfiling)   
{   
    //conn = ProfiledDbConnection.Get(conn);   
    conn = new ProfiledDbConnection(conn, MiniProfiler.Current);
}   
//return ObjectContextUtils.CreateObjectContext<T>(conn);
return conn.CreateObjectContext<T>();

更新: 根据您更新的问题,我将替换我以前的解决方案中的行,如下所示。这包括修复 ProviderFactory 问题的覆盖:

    //conn = new ProfiledDbConnection(conn, MiniProfiler.Current);
    conn = new EFProfiledDbConnection(conn, MiniProfiler.Current);
于 2011-08-31T13:50:38.560 回答