使っています Entity Framework 6.1.1.
わたし deleting single record from table
以下のとおりですが、それが唯一の方法なのか、それとも効率的な方法でさらに書き直すことができるのかはわかりません。
誰かがコメントを共有できますか?
理由:以前の投稿の多くのソリューションがEF 4.0を参照しており、最新バージョン6.1.1を使用していないため、私は尋ねています。
Guid studentId = student.Id;
StudentReportDetail stuDetails = _context.StudentReportDetail.Find(studentId);
if (stuDetails != null)
{
_context.StudentReportDetail.Remove(stuDetails);
_context.SaveChanges();
}
EF 4とEF 6の間でエンティティを削除する方法に変更はありません。EntityFrameworkを使用してエンティティを削除するには、Remove
でDbSet
メソッドを使用する必要があります。 Remove
は既存のエンティティと新しく追加されたエンティティの両方で機能します。
追加されたがまだデータベースに保存されていないエンティティでRemove
を呼び出すと、エンティティの追加がキャンセルされます。エンティティは変更トラッカーから削除され、DbContext
によって追跡されなくなります。
変更追跡されている既存のエンティティでRemove
を呼び出すと、次にSaveChanges
が呼び出されたときにエンティティが削除対象として登録されます。
データベースからのロードによる削除
質問で示した例のように、まず既存のエンティティをコンテキストからロードして削除する必要があります。 Id
がわからない場合は、以下に示すようにクエリを実行して、最初に見つけることができます。
var report= (from d in context.StudentReportDetail
where d.ReportName == "Report"
select d).Single();
context.StudentReportDetail.Remove(report);
context.SaveChanges();
データベースからロードせずに削除
エンティティを削除する必要があるが、まだメモリにない場合、削除するためだけにデータベースからそのエンティティを取得するのは少し非効率的です。削除するエンティティのキーがわかっている場合は、削除するエンティティを表すstubを添付してから、このstubを削除できます。 stubは、キー値が割り当てられているエンティティのインスタンスです。 エンティティの削除に必要なのはキー値だけです。
var toDelete = new StudentReportDetail {Id = 2 };
context.StudentReportDetail.Attach(toDelete);
context.StudentReportDetail.Remove(toDelete);
context.SaveChanges();
他の方法は、エンティティの状態をDeleted
に変更することです。DbContext
にはEntry
およびEntry<TEntity>
というメソッドがあり、これらのメソッドは特定のエンティティのDbEntityEntry
を取得し、エンティティに関する情報へのアクセスを提供し、実行可能なDbEntityEntry
オブジェクトを返します。エンティティに対するアクション。これで、エンティティの状態をEntityState.Deleted
に変更するだけで、コンテキストで削除操作を実行できます。
var toDelete = new StudentReportDetail {Id = 2 };
context.Entry(toDelete).State = EntityState.Deleted;
context.SaveChanges();
サードパーティライブラリの使用
別の方法がありますが、サードパーティのライブラリ EntityFramework Plus を使用しています。インストールできるナゲットパッケージがあります。バッチ削除操作を使用できます。
context.StudentReportDetail
.Where(u => u.Id== stuDetails)
.Delete();