EFCore之CodeFirst模式

EFCore之CodeFirst模式

前言

EF Core有两种数据库设计模式,DBfirst 数据库优先、Codefirst 代码优先。

我们一般设计是先添加数据库表信息,然后将数据库的信息更新到项目实体中。这种做法就是我们的DBfirst模式。

使用codefirst模式,我们就可以先创建表实体,添加字段限制,执行两条命生成数据库。

代码迁移:Add-Migration

数据库更新:update-database

 

环境

l Win10

l VS2022

l .NET5.0

CodeFirst介绍

先引用基本EF Core的基本类库、再然后创建一个数据库上下文,添加实体,执行迁移语句就生成数据库了。

连接SQLServer数据库,引用下面包,其他数据库一样的操作,只是引用的包不一样。

1Microsoft.EntityFrameworkCore

2Microsoft.EntityFrameworkCore.Design

3Microsoft.EntityFrameworkCore.Tools

4Microsoft.EntityFrameworkCore.SqlServer

 

 

MySQL

1Microsoft.EntityFrameworkCore

2Microsoft.EntityFrameworkCore.Design

3Microsoft.EntityFrameworkCore.Tools

4Pomelo.EntityFrameworkCore.MySql

 

项目实践

实现功能是通过EFCorecodeFirst生成数据库和表。项目如下:

 

 

 

新建项目

新建两个项目

DB项目:“Yak.EFCore.DB

接口项目:Yak.EFCore.CodeFirst

DB项目

DB项目用于访问数据库,这里使用SQLserver2012

 

 

 

 

添加后所有的依赖有:

<ItemGroup>

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.16" />

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.16"/>

<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.16" />

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.16"/>

</ItemGroup>

 

 

添加数据库上下文

   public class MyDbContext : DbContext

    {

        public MyDbContext(DbContextOptions<MyDbContext> options)

            : base(options)

        {

        }

        /// <summary>

        /// 重写父类的方法 用于连接数据库

        /// </summary>

        /// <param name="optionsBuilder"></param>

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

        {

            if (!optionsBuilder.IsConfigured)

            {

                optionsBuilder.UseSqlServer("Data Source=.;database=CapDb;uid=sa;pwd=sa123456");

            }

        }

        public DbSet<Sys_User> Users { get; set; }

}

 

 

添加实体类

  Table("Sys_User")]

    public class Sys_User

    {

        public int Id { get; set; }

        /// <summary>

        /// 用户名

        /// </summary>

        public string Name { get; set; }

        /// <summary>

        /// 手机号码

        /// </summary>

        public string C_Mobile { get; set; }

    }

 

 

 

接口项目

新建接口项目,命名为“Yak.EFCore.CodeFirst”。

 

 

 

 

 

 

 

 

 

添加DB项目引用:

 

 

 

 

Startup.cs 中,添加以下配置:

   public void ConfigureServices(IServiceCollection services)

        {

 

            services.AddControllers();

            //添加数据库上下文服务

            services.AddDbContext<MyDbContext>();

            //services.AddSwaggerGen(m =>

            //{

            //    m.SwaggerDoc("v1", new OpenApiInfo() { Title = "swaggertest", Version = "v1" });

            //});

            services.AddCors(m => m.AddPolicy("any", a => a.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()));

        }

 

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

        {

            if (env.IsDevelopment())

            {

                app.UseDeveloperExceptionPage();

            }

 

            app.UseRouting();

 

            app.UseAuthorization();

            //app.UseSwagger();

            app.UseCors();

            //app.UseSwaggerUI(m => {

            //    m.SwaggerEndpoint("/swagger/v1/swagger.json", "swaggertest");

 

            //});

            app.UseEndpoints(endpoints =>

            {

                endpoints.MapControllers();

            });

        }

 

 

迁移数据库

在程序包管理器控制台中输入迁移命令:

add-migration init -Context MyDbContext

update-database -Context MyDbContext

 

执行完之后项目会多一个Migrations文件夹,这个是项目的迁移记录。

 

 

 

结果

生成的数据库。

 

 

 

 

总结

一个数据库上下文对象时,可以:
add-migration init
update-database

 

鸣谢

https://blog.csdn.net/weixin_41472521/article/details/113733580

https://blog.csdn.net/zhang_adrian/article/details/100114115l

源码

https://github.com/yandaniugithub/NETCore

最后,欢迎各位大佬们评论指正

QQ讨论群:610129902

版权所有,转载请注明出处:

https://www.cnblogs.com/yakniu/p/16205068.html

 

 

posted @ 2022-04-28 23:41  春光牛牛  阅读(1589)  评论(0编辑  收藏  举报