通过创建的实体类和DbContext类利用EF的Code First数据库迁移创建数据库。
下面看代码。
一、先创建实体类
我先添加一个BaseEntity,里面就一个属性
[Key] public virtual Guid Id { set; get; }
然后User表和Role表
public class Users : BaseEntity { public string Name { get; set; } public Guid RoleId { get; set; } public virtual Roles Role { get; set; } }
public class Roles:BaseEntity { public string Name { get; set; } }
二、创建DatabaseContext
public class DatabaseContext : DbContext { public DatabaseContext() : base("name=conn") { } public virtual DbSet<Users> Users { get; set; } public virtual DbSet<Roles> Roles { get; set; } }
这里DbSet添加我要操作的实体。
三、创建Configuration
public class Configuration : DbMigrationsConfiguration<DatabaseContext> { public Configuration() { AutomaticMigrationsEnabled = false; ContextKey = "AbpDemo"; } protected override void Seed(DatabaseContext context) { //base.Seed(context); new DefaultRoleAndUserBuilder(context).Build();//后面添加默认数据用的 } }
添加默认数据用的。比如添加管理员
四、添加默认数据生成类
public class DefaultRoleAndUserBuilder { private readonly DatabaseContext _context; public DefaultRoleAndUserBuilder(DatabaseContext context) { _context = context; } public void Build() { CreateUserAndRoles(); } private void CreateUserAndRoles() { var adminRole = _context.Roles.FirstOrDefault(x => x.Name == "admin"); if (adminRole == null) { adminRole = _context.Roles.Add(new Models.Roles { Id = Guid.NewGuid(), Name = "admin" }); _context.SaveChanges(); } var adminUser = _context.Users.FirstOrDefault(x => x.Name == "admin"); if (adminUser == null) { adminUser = _context.Users.Add(new Models.Users { Id = Guid.NewGuid(), Name = "admin", RoleId = adminRole.Id }); _context.SaveChanges(); } } }
五、生成数据库
打开程序包管理器控制台,执行命令
add-migration "InitialData"
这是生成的cs文件的后缀名,执行完后会发现Migrations文件夹多了一个文件,但是数据库没有生成,看下图。
继续执行命令
update-database
这样数据库也有了。