2

Entity Frameworkクラス モデルを作成したローカル .MDF ファイルを含むWPFアプリがあります。

データベースからエンティティを取得するとうまくいきます:

//get entities
using (var context = new TestDataEntities1())
{
    var customers = from c in context.Customers
                    select c;
    foreach (var customer in customers)
    {
        TheCustomers.Add(customer);
    }
}

ただし、更新追加削除*は行いません。**エラーは発生せず、デバッガーはそのまま進み、出力にメッセージはありませんが、データベース テーブルのデータは変更されません

//update entity
using (var context = new TestDataEntities1())
{
    var customer = (from c in context.Customers
                    where c.Id == 1
                    select c).FirstOrDefault();
    customer.FirstName = DateTime.Now.ToString();
    int num = context.SaveChanges(); //returns 1, table unchanged

}

//add entity
using (var context = new TestDataEntities1())
{
    var customer = new Models.Customers();
    customer.FirstName = "Ned";
    customer.LastName = "Newton";
    context.AddToCustomers(customer);
    int num = context.SaveChanges(); //returns 1, table unchanged
}

//delete entity
using (var context = new TestDataEntities1())
{
    var customer = (from c in context.Customers
                    where c.Id == 2
                    select c).FirstOrDefault();
    context.Detach(customer); // table unchanged
}

Entity Framework でエンティティを更新してデータベース テーブルに追加するにはどうすればよいですか?

4

1 に答える 1

4

まず、SaveChanges更新を保証するものではありません。変更された行数を返します。したがって、戻り値を確認してください。0の場合、EFは更新を行ったとは見なしません。> 0の場合は、そうです。

次に、SQLのプロファイルを作成して、EFが何を送信しているかを確認する必要があります。

の結果SaveChangesが0の場合、原因はほぼ確実に、EFがコンテキスト内の何も変更されていないと考えていることです。それがなぜそうなるのかは、変更がどのように追跡されるかによって異なります。上記のコードは挿入には正しいように見えますが、更新にApplyPropertyChangesは不要であるため、削除する必要があります。

EFがSQLを送信しているのに、DBがそれを何もしていない場合は、SQLを調べて修正する必要があります。

于 2010-03-01T14:38:01.053 に答える