Entity-framework-dbcontext
エンティティフレームワーク-DbContext
Entity Frameworkを使用すると、エンティティと呼ばれる共通言語ランタイム(CLR)オブジェクトを使用して、データのクエリ、挿入、更新、および削除を行うことができます。 Entity Frameworkは、モデルで定義されているエンティティと関係をデータベースにマップします。 また、施設を提供します-
- データベースから返されたデータをエンティティオブジェクトとして具体化する
- オブジェクトに加えられた変更を追跡する
- 並行性を処理する
- オブジェクトの変更をデータベースに伝播します
- オブジェクトをコントロールにバインド
オブジェクトとしてデータとやり取りする主なクラスはSystem.Data.Entity.DbContextです。 DbContext APIは、.NET Frameworkの一部としてリリースされていません。 Code FirstおよびDbContext APIへの新機能のリリースをより柔軟かつ頻繁に行うために、Entity FrameworkチームはMicrosoftのNuGet配布機能を通じてEntityFramework.dllを配布します。
- NuGetを使用すると、関連するDLLをWebからプロジェクトに直接取り込むことにより、.NETプロジェクトへの参照を追加できます。
- ライブラリパッケージマネージャーと呼ばれるVisual Studioの拡張機能により、Webからプロジェクトに適切なアセンブリを簡単にプルできます。
- DbContext APIの主な目的は、Entity Frameworkとの対話を簡素化することです。
- また、一般的に使用されるタスクにアクセスするために必要なメソッドとプロパティの数を減らします。
- Entity Frameworkの以前のバージョンでは、これらのタスクを発見してコーディングするのは複雑でした。
- コンテキストクラスは、実行中にエンティティオブジェクトを管理します。これには、データベースからのデータの入力、変更の追跡、データベースへのデータの永続化が含まれます。
DbContext派生クラスの定義
コンテキストを操作するための推奨される方法は、DbContextから派生し、コンテキスト内の指定されたエンティティのコレクションを表すDbSetプロパティを公開するクラスを定義することです。 EF Designerで作業している場合、コンテキストが自動的に生成されます。 Code Firstを使用している場合、通常は自分でコンテキストを記述します。
次のコードは、UniContextがDbContextから派生したことを示す簡単な例です。
- DbSetでは、getterやsetterなどの自動プロパティを使用できます。
- また、コードはずっときれいになりますが、適用する他のロジックがない場合は、DbSetを作成する目的で使用する必要はありません。
public class UniContext : DbContext {
public UniContext() : base("UniContext") { }
public DbSet<Student> Students { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
public DbSet<Course> Courses { get; set; }
}
- 以前は、EDMはObjectContextクラスから派生したコンテキストクラスを生成するために使用されていました。
- ObjectContextの操作は少し複雑でした。
- DbContextはObjectContextのラッパーであり、実際にはObjectContextに似ており、Code First、Model First、Database Firstなどのすべての開発モデルで便利で簡単です。
問い合わせ
あなたが使用できるクエリの3種類があります-
- 新しいエンティティを追加します。
- 既存のエンティティのプロパティ値を変更または更新します。
- 既存のエンティティを削除します。
新しいエンティティを追加する
Entity Frameworkで新しいオブジェクトを追加するには、オブジェクトの新しいインスタンスを作成し、DbSetのAddメソッドを使用して登録するだけです。 次のコードは、新しい学生をデータベースに追加する場合に使用します。
private static void AddStudent() {
using (var context = new UniContext()) {
var student = new Student {
LastName = "Khan",
FirstMidName = "Ali",
EnrollmentDate = DateTime.Parse("2005-09-01")
};
context.Students.Add(student);
context.SaveChanges();
}
}
既存のエンティティの変更
既存のオブジェクトの変更は、変更するプロパティに割り当てられた値を更新し、SaveChangesを呼び出すのと同じくらい簡単です。 次のコードでは、アリの姓がカーンからアスラムに変更されています。
private static void AddStudent() {
private static void ChangeStudent() {
using (var context = new UniContext()) {
var student = (from d in context.Students
where d.FirstMidName == "Ali" select d).Single();
student.LastName = "Aslam";
context.SaveChanges();
}
}
}
既存のエンティティを削除する
Entity Frameworkを使用してエンティティを削除するには、DbSetのRemoveメソッドを使用します。 削除は、既存のエンティティと新しく追加されたエンティティの両方で機能します。 追加されたがまだデータベースに保存されていないエンティティに対してRemoveを呼び出すと、エンティティの追加がキャンセルされます。 エンティティは変更トラッカーから削除され、DbContextによって追跡されなくなります。 変更追跡されている既存のエンティティでRemoveを呼び出すと、次回SaveChangesが呼び出されたときに削除するエンティティが登録されます。 次の例は、学生が名がアリのデータベースから削除されるインスタンスを示しています。
private static void DeleteStudent() {
using (var context = new UniContext()) {
var bay = (from d in context.Students where d.FirstMidName == "Ali" select d).Single();
context.Students.Remove(bay);
context.SaveChanges();
}
}