使用EntityFramework插入数据时中止线程

时间:2016-03-29 01:21:16

标签: c# entity-framework

下面是我的代码,我尝试使用Entity Framework将日志插入数据库。正如您所看到的,我正在使用异步委托来执行此操作。问题是这个代码驻留在类库中,连接字符串信息和Nuget软件包在我将Entity Framework Oracle数据访问内容添加到我的代码中时添加的内容,位于此类库的app.config文件中。现在当我在同一个解决方案中添加对我的其他项目中的.dll的引用时,尝试执行异步委托将日志插入数据库我得到线程中止异常,我尝试了一切可能的人(包括添加新的应用程序。项目中的配置文件,我指的是这个类库,并在那里放入一个连接字符串)告诉stackoverflow和其他地方。但是我仍然无法摆脱这个异常。我已经在我的代码下面给出了整个堆栈调用。它在SaveLogEntry(...)方法中的using语句中抛出异常。

   using (TracingEntity traceEntity = new TracingEntity())


  private void WriteLineInternal(string message, string category, string   componentName, string threadId,int windowsProcessId, string machineName, string exceptionThrown,string customMessage,int traceEventId, string processName, string userId)
    {
        loggingFunction = SaveLogEntry;
        IAsyncResult obj = loggingFunction.BeginInvoke(message, category, componentName, threadId, windowsProcessId,machineName, exceptionThrown,customMessage,traceEventId,processName, userId, null, null);
    }

    private void SaveLogEntry(string message, string catrgory, string componentName, string threadId, int windowsProcessId, string machineName, string exceptionThrown, string customMessage, int traceEventId, string processName, string userId)
    {
        lock (traceLockObject)
        {
            try
            {
                using (TracingEntity traceEntity = new TracingEntity())
                {
                    if (string.IsNullOrEmpty(ApplicationName))
                    {
                        traceEntity.INSERTTRACELOGS(message, catrgory, componentName, threadId, windowsProcessId, machineName, processName, exceptionThrown, customMessage, traceEventId, null, userId);
                    }
                    else
                    {
                        traceEntity.INSERTTRACELOGS(message, catrgory, componentName, threadId, windowsProcessId, machineName, processName, exceptionThrown, customMessage, traceEventId, ApplicationName, userId);
                    }
                }
            }
            catch (Exception ex)
            {
                if (this.DBTraceFailed != null)
                {
                    DBTraceFailed(ex.ToString());
                }
                this.WriteEntryToInternalLog(ex.ToString());
            }
        }
    }

System.Threading.ThreadAbortException:线程正在中止。    at System.Data.Entity.Utilities.Check.NotEmpty(String value,String parameterName)    在System.Data.Entity.DbContext..ctor(String nameOrConnectionString)    在C:\ LOFT_Projects \ LoggingAndTracingLib \ LoggingAndTracingLib \ TraceDBModel.Context.cs中的LoggingAndTracingLib.TracingEntity..ctor():第21行    at LoggingAndTracingLib.CustomDBTraceListener.SaveLogEntry(String message,String catrgory,String componentName,String threadId,Int32 windowsProcessId,String machineName,String exceptionThrown,String customMessage,Int32 traceEventId,String processName,String userId)in C:\ LOFT_Projects \ LoggingAndTracingLib \ LoggingAndTracingLib \ CustomDBTraceListener.cs:第483行

1 个答案:

答案 0 :(得分:0)

您确定已正确设置连接字符串吗?看起来框架无法在.config文件中找到正确的连接字符串,或者存在访问文件本身的问题。

有时线程中止异常可以“隐藏”真正的异常。检查内部异常以获取更多详细信息。