使用Entity Framework的代码不调用jquery ajax的成功函数

时间:2013-03-06 07:10:39

标签: asp.net-mvc entity-framework jquery

我有两种替代方法可以从数据库中检索数据。

1)使用Ado.net

public List<Customer> GetDetail()
{
    SqlConnection connectionstring = new SqlConnection(connectionstring goes on..);
    List<Customer> custList = new List<Customer>();

    connectionstring.Open();

        string query = "select * from Customer";
        SqlCommand command = new SqlCommand(query, connectionstring);
        SqlDataReader reader = command.ExecuteReader();
        if (reader.HasRows)
        {
            while (reader.Read())
            {
                Customer cust = new Customer();
                cust.Name = reader["Name"].ToString();
                cust.UserName = reader["UserName"].ToString();
                cust.CountryId = reader["CountryId"].ToString();
                cust.EmailId = reader["EmailId"].ToString();
                cust.PhoneNo = reader["PhoneNo"].ToString();
                custList.Add(cust);
            }
        }
    connectionstring.Close();
    return custList;
}

2)使用实体框架

        public List <Customer> GetDetail()
        {
            DataTable dt = new DataTable();
            List<Customer> CustomerList = new List<Customer>();

            CustomerEntities context = new CustomerEntities(GetConnectionObject());
            foreach (Customer cus in context.Customers)
            {
                CustomerList.Add(cus);
            }
            return CustomerList;
        }

使用jquery ajax调用调用控制器方法,该调用调用上述方法。

$.ajax({
        type: "POST",
        url: "/Customer/GetDetails",
        dataType: 'json',
        async: false, 
        cache: false,
        success: function (data) {
            alert("success");
            $.each(data, function (index, customer) {
                alert(customer.Name + " " + customer.UserName);
            });
        },
        error: function (jqXHR, textStatus, errorThrown) {
            if (typeof (console) != 'undefined') {
                alert("oooppss");
            }
            else { alert("something went wrong"); }
        }
    });

如果是正常的ado.net代码,它会成功检索数据并调用ajax成功函数。

但是如果它是实体框架方法,即使它正在检索数据(在调试时,我可以看到customerList对象中的结果数据),ajax成功函数也没有被调用。相反,错误函数被调用。 errorThrown是“内部服务器错误”。

为什么呢?实体框架有什么问题?

有人可以为此提供解决方案吗?

4 个答案:

答案 0 :(得分:1)

实体框架创建无法序列化的对象(因为它们支持延迟加载,序列化它们实际上可能意味着序列化数据库)。要停止此行为,您需要完全关闭延迟加载

            context.ContextOptions.ProxyCreationEnabled = false;
            context.ContextOptions.LazyLoadingEnabled = false;

在进行数据库查询之前插入此内容,如果问题仍然存在,请在早上致电给我。

答案 1 :(得分:0)

比较两个客户列表集合并检查是否有任何差异..可能是返回对象创建问题... 要么 在CustomerEntities中使用Using关键字。

答案 2 :(得分:0)

使用此

 error: function (xhr, ajaxOptions, thrownError) {
    alert(xhr.status);
    alert(thrownError);
    alert(xhr.responseText);
  }

看看会出现什么错误。
可能有很多错误。

答案 3 :(得分:0)

Json Return的EF Creats对象的新代码您必须 首先确保此代码。

            dbcontext.Configuration.ProxyCreationEnabled = false;
            dbcontext.Configuration.LazyLoadingEnabled = false;