0

我在 VS2012 中使用 win2k8 r2 64 位上的更新 1 工作。

在一个简单的类库应用程序中,我执行 Add > New Item> ADO.NET Entity Data Model

我在网络上选择了一个 SQL Server,然后选择了数据库并添加了一个表。该表已添加,我可以在我的代码中将其作为类名进行访问。

问题:当我对后端数据库执行任何操作时,使用我的库的应用程序因 stackoverflow 错误而崩溃(无异常)。例如这将崩溃:var logs =_db_context.LOGs.ToList();

有任何想法吗?

编辑:相同的项目在同一台机器上的 VS2010 中工作。这只是在我升级到也升级实体框架的 VS2012 时才开始发生的。还值得一提的是,如果我删除访问数据库的代码,应用程序运行得很好。此外,删除和重新添加 .edmx 也无济于事,清理/重新构建或重新启动 VS 也无济于事。

EDIT2:调试后我注意到何时LogServerEntities context = new LogServerEntities()到达该行,我尝试从“Locals”扩展上下文变量 VS 结束调试说Managed (v4.0.30319)' has exited with code -2146233082 (0x80131506).

4

1 回答 1

0

类库实际上是一个自定义跟踪侦听器,如下所示。当我在构造函数中注释 FirstChanceHandler 时,异常实际上进入了控制台输出:程序集引用 (System.Management.Automation) 未能加载。我真的不需要那个程序集,只是简单地删除了它,stackoverflow 错误(我猜这是一个错误)就消失了。

    public Listener()
    {
        AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;
    }

    public void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
    {
        WriteException(e.Exception);
    }

    public void WriteException(Exception e)
    {
        string app_identity = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
        string server_name = System.Environment.MachineName;

        using (LogServerEntities context = new LogServerEntities())
        {
            LOG log = new LOG();
            log.DATE = DateTime.Now;
            log.THREAD = Thread.CurrentThread.Name;
            log.MESSAGE = e.Message;
            log.LOGGER = string.Format("{0} {1}", app_identity, server_name);
            log.LEVEL = Level.Exception.ToString();
            log.EXCEPTION = e.GetType().FullName;

            var web_exception = e as WebException;
            if (web_exception != null)
            {
                if (web_exception.Status == WebExceptionStatus.ProtocolError)
                {
                    var response = web_exception.Response as HttpWebResponse;
                    if (response != null)
                        log.HTTP_RESPONSE_CODE = ((int)response.StatusCode).ToString();
                    else
                        log.HTTP_STATUS = web_exception.Status.ToString();
                }
                else
                {
                    log.HTTP_STATUS = web_exception.Status.ToString();
                }
            }

            context.LOGs.Add(log);
            context.SaveChanges();
        }
    }
于 2013-02-23T16:04:41.170 回答