目录
一、Entity Framework概述
二、Entity Framework的核心组成部分
Entity Data Model (EDM):
Entity Client:
Object Services:
ADO.NET Provider:
三、分层结构
应用程序层:
Entity Framework层:
数据库层:
四、EF 主要的功能包括
五、三种开发模式详解
1. 代码优先(Code First)
2. 数据库优先(Database First)
3. 模型优先(Model First)
六、总结
Entity Framework (EF) 是一个开源的对象关系映射 (ORM) 框架,它可以使 .NET 开发者能够使用 LINQ 查询关系型数据库,并且可以在 .NET 对象和数据库间转换数据。EF 提供了一种高级的抽象,让开发者不需要直接编写 SQL 查询和处理数据转换。
EF支持三种主要的开发模式:代码优先(Code First)、数据库优先(Database First)和模型优先(Model First)。下面将结合实际案例,详细讲解这三种模式,帮助初学者轻松理解和掌握。
Entity Framework通过提供一组丰富的API和工具,使得数据访问层的开发变得更加简单和高效。它支持多种数据库系统,如SQL Server、MySQL、Oracle等,并允许开发人员使用LINQ(Language Integrated Query)来查询和操作数据。
这些部分通常以XML格式定义,并存储在.edmx文件中,该文件是EF实现ORM的关键配置文件。
从逻辑上讲,EF框架的分层结构可以归纳为以下几个层次:
核心思想:先编写实体类和数据上下文(DbContext),然后根据这些代码生成数据库。
适用场景:适用于新项目,或对数据库结构有完全控制权的情况。
实际案例:
假设我们要开发一个简单的博客系统,包含作者(Author)和文章(Post)两个实体。
1)定义实体类:
public class Author
{
public int AuthorId { get; set; }
public string Name { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int AuthorId { get; set; }
public Author Author { get; set; }
}
2)定义数据上下文:
public class BlogContext : DbContext
{
public DbSet Authors { get; set; }
public DbSet Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=BlogDb;Trusted_Connection=True;");
}
}
3)使用迁移生成数据库:
在Visual Studio中,通过Package Manager Console运行以下命令:
Enable-Migrations
Add-Migration InitialCreate
Update-Database
这些命令会生成数据库迁移文件,并根据迁移文件创建数据库。
核心思想:从现有数据库生成实体类和映射文件,然后在此基础上进行开发。
适用场景:适用于已有数据库的情况,如维护现有系统或集成第三方数据库。
实际案例:
假设我们有一个现成的数据库,包含Authors和Posts两个表。
核心思想:先设计数据模型,然后根据模型生成数据库。
适用场景:适用于从零开始设计数据模型的情况,或需要高度定制数据库结构的情况。
实际案例:
1)在Visual Studio中设计模型:
通过添加“ADO.NET Entity Data Model”项,选择“空模型”,并使用设计器添加实体和关系。 2)生成数据库脚本:
设计完成后,右键点击模型图,选择“生成数据库脚本”,将生成的SQL脚本在数据库中执行,以创建数据库和表。
3)使用生成的实体类进行数据操作:
与Database First类似,Model First也生成了实体类,可以直接在代码中使用。
使用Entity Framework Power Tools或dotnet ef工具生成模型:
在Visual Studio中,可以通过添加“ADO.NET Entity Data Model”项,并选择“从数据库生成模型”来生成实体类和映射文件。或者使用dotnet ef工具:
dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=ExistingDb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
这将根据数据库中的表生成相应的实体类和DbContext。
使用生成的实体类进行数据操作:
生成的实体类可以直接在代码中使用,进行CRUD操作。
Entity Framework的三种开发模式各有优缺点和适用场景。Code First模式提供了最大的灵活性,适合新项目或对数据库结构有完全控制权的情况;Database First模式适用于已有数据库的情况,可以快速生成实体类和映射文件;Model First模式则适用于从零开始设计数据模型的情况。根据项目的具体需求选择合适的开发模式