我正在尝试使用带有EFCodeFirst的mvc-mini-profiler我正在创建一个DbProfiledConnection并将其传递给构造中的DbContext,如下所示。应用程序继续按预期工作,sql未向Profiler公开。
public class WebContext : DbContext
{
static DbConnection _connection = new SqlConnection(ConfigurationManager.ConnectionStrings["WebContext"].ConnectionString);
static DbConnection _profiledConnection = MvcMiniProfiler.Data.ProfiledDbConnection.Get(_connection);
public WebContext()
: base(_profiledConnection, true)
{
}
我的坏事。
我已对其进行了修改,以便在我的UnitOfWork中构建WebContext时,我传入ProfiledDbConnection
public UnitOfWork()
{
var profiledConnection = MvcMiniProfiler.Data.ProfiledDbConnection.Get(connection);
this.context = new MyContext(profiledConnection);
}
我已经检查过并且在Application_BeginRequest中设置了MiniProfier Current,当我尝试查询数据库时,它会返回ProfiledDbConnection,并在ProfiledDbProviderServices类中抛出错误。
protected override string GetDbProviderManifestToken(DbConnection connection)
{
return tail.GetProviderManifestToken(connection);
}
此方法返回“提供程序未返回ProviderManifestToken字符串”。错误
答案 0 :(得分:7)
我怀疑这与静态字段初始化程序有关。无论如何,网络应用上的连接从不是静态的(但最多是请求特定的)。
关键是:ProfiledDbConnection
实际上是什么? Get
方法仅在您当前正在进行性能分析时(在当前请求中)返回ProfiledDbConnection
,并且该连接是针对该请求上的MiniProfiler
实例进行分析的。
如果使用静态字段,则有两种情况:
MiniProfiler.Current
为空时不会进行分析