Administrator
发布于 2023-12-16 / 82 阅读 / 0 评论 / 0 点赞

.NET Core EF(Entity Framework) Core 自动创建数据库

1.什么是EF

EF是指Entity Framework(实体框架),是一个由Microsoft开发的ORM(对象关系映射)框架。它可以将关系型数据库中的数据转换为.NET应用程序中的对象,并且能够自动完成对象和数据库之间的增删改查操作。

使用EF,开发人员可以直接使用.NET语言操作数据库,无需编写复杂的SQL语句。通过EF,我们可以将数据库表映射成类,将表中的字段映射成类的属性,从而使得操作数据库变得更加方便简单。

EF支持多种数据库引擎,包括SQL Server、Oracle、MySQL等。同时,EF还提供了LINQ查询语言的支持,使得查询数据变得更加灵活和高效。

2.生成数据库的三种方式

  1. Code First:使用代码来定义实体类和数据上下文,然后通过Code First自动创建相应的数据库及其表结构。

  2. Model First:通过Visual Studio中的图形化界面来设计数据模型,然后通过Model First将其转换为数据库及其表结构。

  3. Database First:先有现成的数据库,然后通过Entity Framework的逆向工程功能将数据库表映射到.NET应用程序中的实体类,并且可以通过Database First来更新或重建数据库及其表结构。

3.Code First 如何做

  1. 创建实体类:使用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; }
    }
    
  2. 创建数据上下文类:创建一个派生自DbContext的类,这个类将用于协调实体类与数据库之间的关系。例如:

    复制代码public class SchoolContext : DbContext
    {
        public SchoolContext() : base("SchoolDB") { }
    
        public DbSet<Student> Students { get; set; }
    }
    
  3. 配置实体类与数据表之间的映射关系:可以使用Fluent API或Data Annotations来配置实体类与数据表之间的映射关系,以便EF能够正确地创建数据表。例如:

    复制代码protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
            .ToTable("tbl_Students")
            .HasKey(s => s.Id);
    }
    
  4. 使用数据库初始化程序:在应用程序启动时,使用数据库初始化程序来确保数据库和表结构已经被创建。可以使用MigrateDatabaseToLatestVersion或DropCreateDatabaseIfModelChanges等初始化策略。例如:

    复制代码Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchoolContext, Configuration>());
    
  5. 执行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();

评论