1

データベースからデータを取得するには、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 は「内部サーバー エラー」です。

なんで?エンティティ フレームワークの何が問題になっていますか?

誰でもこれに対する解決策を教えてください..?

4

4 に答える 4

1

Entity Framework は、シリアル化できないオブジェクトを作成します (オブジェクトは遅延読み込みをサポートしているため、オブジェクトをシリアル化すると、データベースをシリアル化することになります)。この動作を停止するには、遅延読み込みを完全にオフにする必要があります

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

データベース クエリを実行する前にこれを挿入してください。問題が解決しない場合は、朝に電話してください。

于 2013-03-06T10:50:46.300 に答える
0

これを使って

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

そして、エラーが何であるかを確認してください。
多くのエラーが発生する可能性があります。

于 2013-03-06T07:21:14.500 に答える
0

両方の顧客リスト コレクションを比較し、違いがあるかどうかを確認します。返されるオブジェクトが問題を作成している可能性があります。または、CustomerEntities で Using キーワードを使用します。

于 2013-03-06T07:18:22.200 に答える
0

EF の新しいコード Json リターンのオブジェクトを作成する まず、このコードを確認する必要があります。

            dbcontext.Configuration.ProxyCreationEnabled = false;
            dbcontext.Configuration.LazyLoadingEnabled = false;
于 2019-06-12T12:28:41.417 に答える