gpt4 book ai didi

c# - MiniProfiler、EntityFramework 代码优先和后台任务 nullreference

转载 作者:太空狗 更新时间:2023-10-29 23:47:34 26 4
gpt4 key购买 nike

我在我的 mvc3 项目中首先使用 EF 4.2 代码。

miniprofiler 工作正常(sql + mvc),但我遇到了异步任务的问题。

我这样执行它们(这个方法可以吗?我对这个 new DatabaseContext() 感到有点不安)

public static void PerformAsycAction(this User user, Action<User> action)
{
ThreadPool.QueueUserWorkItem(_ =>
{
var context = new DatabaseContext();
MiniProfilerEF.Initialize();
var consistantUser = context.Set<User>().Get(user.Id);
action(consistantUser);
context.SaveChanges();
});
}

我在 Application_Start 中有正确的行:

  protected void Application_Start()
{
MiniProfilerEF.Initialize();
...
}

action(consistantUser); 中第一次使用 db 操作时抛出异常这是踪迹:

at MvcMiniProfiler.MiniProfiler.AddSqlTiming(SqlTiming stats) in C:\Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\MiniProfiler.cs:line 274 at MvcMiniProfiler.SqlTiming..ctor(DbCommand command, ExecuteType type, MiniProfiler profiler) in C:\Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\SqlTiming.cs:line 137 at MvcMiniProfiler.SqlProfiler.ExecuteStartImpl(DbCommand command, ExecuteType type) in C:\Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\SqlProfiler.cs:line 39 at MvcMiniProfiler.SqlProfilerExtensions.ExecuteStart(SqlProfiler sqlProfiler, DbCommand command, ExecuteType type) in C:\Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\SqlProfiler.cs:line 93 at MvcMiniProfiler.MiniProfiler.MvcMiniProfiler.Data.IDbProfiler.ExecuteStart(DbCommand profiledDbCommand, ExecuteType executeType) in C:\Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\MiniProfiler.IDbProfiler.cs:line 14 at MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader(CommandBehavior behavior) in C:\Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\Data\ProfiledDbCommand.cs:line 158 at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)

我做错了什么?任何帮助将不胜感激。

编辑: 我尝试再次初始化 MiniProfiler (MiniProfilerEF.Initialize();),在执行后台任务的线程中(在启动 DatabaseContext 之前),然后现在是另一个异常(exception):

Unable to cast object of type 'MvcMiniProfiler.Data.EFProfiledDbConnection' to type 'System.Data.SqlClient.SqlConnection

事实上,不需要在后台线程中分析查询,但它会崩溃整个线程,因此应用程序无法正常工作,我不得不禁用整个分析器。有没有办法为那个后台线程禁用它以防止它崩溃?

最佳答案

代码在尝试访问您的连接字符串时中断,因为连接字符串是 Entity Framework 样式的连接字符串。

将连接字符串传递给微型分析器时,您必须从 EF 连接字符串中提取实际的连接字符串。

EntityConnection connection = 
new EntityConnection(ConfigurationManager
.ConnectionStrings["ConnectionStringName"].ConnectionString));

string connectionString = connection.StoreConnection.ConnectionString;

关于c# - MiniProfiler、EntityFramework 代码优先和后台任务 nullreference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9471588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com