我有两种替代方法可以从数据库中检索数据。
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是“内部服务器错误”。
为什么呢?实体框架有什么问题?
有人可以为此提供解决方案吗?
答案 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;