使用实体框架,您可以使用称为实体的公共语言运行时(CLR)对象来查询,插入,更新和删除数据.实体框架将模型中定义的实体和关系映射到数据库.它还为&提供设施;
将数据库中返回的数据实体化为实体对象
跟踪对对象所做的更改
处理并发性
将对象更改传播回数据库
将对象绑定到控件
负责与数据作为对象进行交互的主类是System.Data.Entity.DbContext. DbContext API不作为.NET Framework的一部分发布.为了更灵活和频繁地向Code First和DbContext API发布新功能,Entity Framework团队通过Microsoft的NuGet分发功能分发EntityFramework.dll.
NuGet允许您通过将相关的DLL直接从Web中提取到项目中来添加对.NET项目的引用.
一个名为Library Package Manager的Visual Studio扩展提供了一种简单的方法,可以将适当的程序集从Web中提取到项目中.
DbContext API主要用于简化您与实体框架的交互.
它还减少了访问常用任务所需的方法和属性数量.
在以前版本的Entity Framework中,这些任务通常很复杂over和code.
上下文类在运行时管理实体对象,包括使用数据库中的数据填充对象,更改跟踪以及将数据持久化到数据库.
定义DbContext派生类
使用上下文的推荐方法是定义一个派生自DbContext的类,并公开表示上下文中指定实体的集合的DbSet属性.如果您正在使用EF Designer,将为您生成上下文.如果您正在使用Code First,您通常会自己编写上下文.
以下代码是一个简单示例,显示UniContext派生自DbContext.
您可以对DbSet使用自动属性,例如getter和setter.
它还使代码更清晰,但是当你没有其他逻辑可以应用时,你不需要使用它来创建DbSet.
public class UniContext : DbContext { public UniContext() : base("UniContext") { } public DbSetStudents { get; set; } public DbSet Enrollments { get; set; } public DbSet Courses { get; set; }}
以前,EDM用于生成派生的上下文类来自ObjectContext类.
使用ObjectContext有点复杂.
DbContext ObjectContext的包装器实际上类似于ObjectContext,在所有开发模型中都很有用,如Code First,Model First和Database First.
查询
您可以使用三种类型的查询,例如 :
添加新实体.
更改或更新现有实体的属性值.
删除现有实体.
添加新实体
使用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一样简单.在下面的代码中,Ali的姓氏已从Khan更改为Aslam.
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时注册该实体以进行删除.以下示例显示了一个实例,其中学生从名为Ali的数据库中删除.
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(); }}