1.什么是EF
EF是指Entity Framework(实体框架),是一个由Microsoft开发的ORM(对象关系映射)框架。它可以将关系型数据库中的数据转换为.NET应用程序中的对象,并且能够自动完成对象和数据库之间的增删改查操作。
使用EF,开发人员可以直接使用.NET语言操作数据库,无需编写复杂的SQL语句。通过EF,我们可以将数据库表映射成类,将表中的字段映射成类的属性,从而使得操作数据库变得更加方便简单。
EF支持多种数据库引擎,包括SQL Server、Oracle、MySQL等。同时,EF还提供了LINQ查询语言的支持,使得查询数据变得更加灵活和高效。
2.生成数据库的三种方式
Code First:使用代码来定义实体类和数据上下文,然后通过Code First自动创建相应的数据库及其表结构。
Model First:通过Visual Studio中的图形化界面来设计数据模型,然后通过Model First将其转换为数据库及其表结构。
Database First:先有现成的数据库,然后通过Entity Framework的逆向工程功能将数据库表映射到.NET应用程序中的实体类,并且可以通过Database First来更新或重建数据库及其表结构。
3.Code First 如何做
创建实体类:使用C#或VB.NET语言编写实体类,定义类的属性、方法等。例如:
复制代码public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string Major { get; set; } }
创建数据上下文类:创建一个派生自DbContext的类,这个类将用于协调实体类与数据库之间的关系。例如:
复制代码public class SchoolContext : DbContext { public SchoolContext() : base("SchoolDB") { } public DbSet<Student> Students { get; set; } }
配置实体类与数据表之间的映射关系:可以使用Fluent API或Data Annotations来配置实体类与数据表之间的映射关系,以便EF能够正确地创建数据表。例如:
复制代码protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Student>() .ToTable("tbl_Students") .HasKey(s => s.Id); }
使用数据库初始化程序:在应用程序启动时,使用数据库初始化程序来确保数据库和表结构已经被创建。可以使用MigrateDatabaseToLatestVersion或DropCreateDatabaseIfModelChanges等初始化策略。例如:
复制代码Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchoolContext, Configuration>());
执行CRUD操作:使用数据上下文类中的DbSet属性来执行CRUD操作,例如:
复制代码using (var context = new SchoolContext()) { var student = new Student { Name = "Alice", Age = 18, Major = "Computer Science" }; context.Students.Add(student); context.SaveChanges(); }
4.应用
1、.NET Core中手动执行命令创建
dotnet ef migrations add MyFirstMigration
dotnet ef database update
2、通过.NET Core代码,首次使用时自动创建
1)如果已经创建了迁移,则可以在Startup.cs中执行它们,如下所示。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
context.Database.Migrate();
}
//省略不相关代码...
}
使用添加迁移的表和数据创建数据库
2)如果不迁移数据,只是需要在首次运行时,完全按照在上下文类中的DbContext模型来创建数据库,则可以使用:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
context.Database.EnsureCreated();
}
//省略不相关代码...
}
如果需要在创建数据库之前删除它,则可以使用下面代码:
context.Database.EnsureDeleted();