1

最近、Entity Framework で DB からエントリを削除する方法が 2 つあることに気付きました。

私はもともと以下を使用してそれを実装していました

db.Courses.Remove(course);

しかし、その後、次のこともできることがわかりました

db.Entry(course).State = EntityState.Deleted;

両者に違いはありますか?後者に切り替える唯一の理由は、エントリを編集するために使用するアプローチであるため、実装の一貫性を高めることです。

何かご意見は ?

4

3 に答える 3

2

どちらのメソッドもエンティティを削除済みとしてマークするため、次の db.SaveChanges(); データベースとコンテキストからそれらを削除します。

この記事では、エンティティを追加、変更、および削除するすべての方法について説明します。

http://msdn.microsoft.com/en-us/library/gg696174(v=vs.103).aspx

于 2012-05-27T00:05:21.217 に答える
2

はい、両者には違いがあります。

モデルにカスケード オプションを設定すると、顧客が削除済みとしてマークされたときに、コンテキストに読み込まれた注文も削除対象としてマークされます。

例えば

var customer = db.Customers.Include(c => c.Orders).First(c => c.CustomerId == 1); db.Customers.Remove(customer); // at this point all orders in teh context are also marked as deleted.

ただし、これを行うと

db.Entry(customer).State = EntityState.Deleted;

注文を削除済みとしてマークしません。

于 2012-05-27T00:31:22.813 に答える
1

どちらもほぼ同じことをします。

後者は単にレコードの状態を削除済みに設定し、前者は分離済みに設定します。レコードの削除を反映するために、変更を保存するために呼び出す必要があります。

using (var context = new SchoolEntities ()) 
{
     var dpt = new Department { Name = "Mathematics", DepartmentID = 1};
     context.Entry(dpt).State = EntityState.Added;
     context.SaveChanges(); 
}

表示されているコードは、他の回答と同じリソースからのものです

于 2012-05-27T00:04:45.683 に答える