データベースからデータを取得するには、2 つの代替方法があります。
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 callを使用してコントローラーメソッドを呼び出しています。
$.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 は「内部サーバー エラー」です。
なんで?エンティティ フレームワークの何が問題になっていますか?
誰でもこれに対する解決策を教えてください..?