efcore mysql数据库codefirst生成
添加引用
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Tools
- Pomelo.EntityFrameworkCore.MySql
创建实体对象
这里创建两个实体对象,顺便演示添加外键的效果
public class TUser { public int ID { get; set; } public string UserName { get; set; } public string Password { get; set; } public ICollection<TRole> TRoles { get; set; } }
public class TRole { public int ID { get; set; } public string Name { get; set; } }
生成数据表时,属性“ID”默认成为自增的主键。
上述两个实体对象生成的数据表中,TRole中会包含TUser的外键,默认命名为TUserID。
创建上下文对象
public class MyDbContext:DbContext { public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { } public DbSet<TUser> Users { get; set; } public DbSet<TRole> Roles { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } }
将根据此文件生成数据库,把想要生成数据表的实体类型以上面代码的形式作为属性MyDbContext为自定义的数据库上下文名称,由用户自己起名。其他代码可保持不变。
添加数据库连接字符串
在appsettings.json中加入连接字符串(下方绿底部分):
{ "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*", "ConnectionStrings": { "MyDbContext": "server=localhost;database=MyDb;user=myUsername;password=myPwd;" } }
localhost替换为你的mysql地址,MyDb为将要生成数据表的数据库名称,myUsername为mysql的用户名,myPwd为mysql的密码。
添加数据上下文服务
在StartUp类的ConfigureServices方法中添加如下代码
services.AddDbContext<MyDbContext>(options => options.UseMySql(Configuration.GetConnectionString("MyDbContext")));
此代码将上面我们编写的MyDbContext这个类注册为数据上下文的服务,后续可通过DI方便地调用。Configuration.GetConnectionString(string name)获取appsettings.json中“ConnectionStrings”这部分中对应名称的字符串。
生成数据库
用vs2019的话,直接菜单栏“工具”-NuGet包管理器-程序包管理器控制台。
在打开的窗口中输入如下两个命令
- Add-Migration InitialCreate
- Update-Database
第一个命令会生成一个文件,记录所有我们代码编写对数据库的影响,生成的文件自动放入Migrations文件夹下,此文件夹也自动生成,第一个命令中的“Initial Create”用来命名此次数据库操作,可自己起名。
第二个命令将会根据第一个命令生成的迁移文件对数据库进行操作。
完成
此时,mysql数据库中应该就可以看到TUser和TRole两个数据表了。