ASP.NET MVC:如何查看SaveChanges执行的查询(在ADO.NET实体数据模型上)

时间:2009-05-01 16:28:12

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

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

  

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实体数据模型。

由于

3 个答案:

答案 0 :(得分:1)

我不确定使用实体框架是否有“整洁”的方法,但如果您使用的是SQL Server,那么我通常会使用SQL Server Profiler来读取正在执行的查询服务器。如果您使用的是其他数据库,那么可能会有相同的数据库 - 无论如何,如果您告诉我们,它可能会有所帮助。

如果你正在使用MySQL&gt; 5.0.37它具有新的query profiler功能 - 这应该能够显示正在发送的查询。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

查看this错误报告。

BTW,我发现以下代码行解决了这个问题:

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