【问题标题】:ASP.NET MVC: How to view query executed by SaveChanges (on the ADO.NET Entity Data Model)ASP.NET MVC:如何查看 SaveChanges 执行的查询(在 ADO.NET 实体数据模型上)
【发布时间】:2009-05-01 16:28:11
【问题描述】:

当尝试向数据库添加一些项目时,我收到此错误:

用户代码未处理UpdateException
更新条目时出错。有关详细信息,请参阅 InnerException。

InnerException 包含以下内容:

{"列数与第 1 行的值数不匹配"}

我看不到我尝试添加的对象有任何问题,所有必需的值都已填充。
有没有办法查看导致问题的查询?

方法的代码,如果需要的话:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult LaadVerrichtingenIn() {
        int[] intArray = Array.ConvertAll<String, int>(Request.Form["selectedObjects"].Split(','), new Converter<String, int>(Convert.ToInt32));
        List<Verrichting> gekozenVerrichtingen = new List<Verrichting>();

        foreach(int i in intArray){
            base._entities.AddToVerrichtingSet(((Dictionary<int, Verrichting>)Session["ingelezenVerrichtingen"])[i]);
            gekozenVerrichtingen.Add(((Dictionary<int, Verrichting>)Session["ingelezenVerrichtingen"])[i]);
        }
        Session["ingelezenVerrichtingen"] = null;
        base._entities.SaveChanges(); //Exception occurs here

        return View("IngeladenVerrichtingen");
    }

base._entities 是一个 ADO.NET 实体数据模型。

谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc ado.net-entity-data-model


    【解决方案1】:

    我不确定实体框架是否有“更简洁”的方法,但如果您使用的是 SQL Server,那么我通常会使用 SQL Server Profiler 来读取针对服务器执行的查询.如果您使用的是不同的数据库,那么可能会有一个等效的数据库 - 无论如何,如果您让我们知道这可能会有所帮助。

    如果您使用的是 MySQL > 5.0.37,它具有新的 query profiler 功能 - 这应该能够向您显示正在发送的查询。

    【讨论】:

    • 感谢您的回答,但不幸的是我没有使用 SQL Server。我正在使用 MySQL 服务器。我会在那里寻找如何访问查询日志。
    • 我已经用 mysql 中 sql 分析器的链接更新了答案,它可能会有所帮助,尽管看起来你必须发出命令才能从要分析的会话中启用分析,所以你可能必须让 EF 通过手动查询来做到这一点。另请参阅stackoverflow.com/questions/20263/… 了解其他方法。
    【解决方案2】:

    如果您使用的是 SQL Server,SQL Server Profiler 将可以正常工作。在实体框架中,您可以使用ToTraceString 方法。

    【讨论】:

    • 我不知道如何在我的代码中使用它。这些示例仅显示如何在您自己编写的查询中使用它。我是整个 .NET 框架的初学者,所以我可能忽略了一些东西:) 你能否举个例子说明我如何在实体变量上使用该方法并提取将被执行的 quer(y)(ies) ?
    • 你是对的。它仅适用于选择,不适用于插入/更新/删除。
    【解决方案3】:

    我刚刚在使用 Entity Framework 和 MySQL 插入数据时遇到了同样的问题。我的预感是,由于我使用的是 double 值,因此小数分隔符“,”被误解为字段分隔符。我升级到连接器版本 6.1.0,但仍然没有运气。也许这也发生在你的情况。

    查看this 错误报告。

    顺便说一句,我发现以下代码行可以解决这个问题:

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      相关资源
      最近更新 更多