(3).Net Core的EF Core的使用

官方文档:https://docs.microsoft.com/zh-cn/ef/core/index

Nuget安装:

Install-package Microsoft.EntityFrameworkCore
Install-package Microsoft.EntityFrameworkCore.SqlServer
Micorsoft.EntityFrameworkCore:EF框架的核心包
Micorsoft.EntityFrameworkCore.SqlServer:针对SqlServer数据库的扩展,使用SqlServer数据库必须。类似的还有MySql,SqlLite等
Micorsoft.EntityFrameworkCore.Tools
&Micorosft.EntityFrameworkCore.Design:用户根据现有的数据库生成模型代码,CodeFirst模式不需要安装后两个。

模型创建以及配置:

  • 建立模型实体类,实现的是一个权限管理,建立以下表
public class UserEntity :BaseEntity
    {
        public long ID { get; set; }
        public string Name { get; set; }
        public string PhoneNum { get; set; }
        public string Email { get; set; }
        public string PWDSalt { get; set; }
        public string PWDHash { get; set; }
        public int LoginErrorTimes { get; set; }
        public DateTime? LastLoginErrorTime { get; set; }
    }
 public class RoleEntity : BaseEntity
    {
        public long ID { get; set; }
        public string Name { get; set; }
    }

public class PermissionEntity:BaseEntity
    {
        public long ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }
  •  实体配置:

EF Core和EF差不多,都有一些默认配置

bool  ---》bit    1(长度) 

string ---> longtext              可空

DateTime --->datetime 6  

.........等等,下面举例说明常用到的几个api

var modelBuilder=new ModelBuilder();
var userBuilder= modelBuilderEntity<UserEntity>().ToTable("T_Users");//映射到哪个表
   userBuilder.Property(u => u.Name).HasMaxLength(50).IsRequired(true);//设置长度与是否可空,调用IsRequired默认为True不可空

 userRoleRelation.HasOne(m => m.User).WithMany().HasForeignKey(m => m.UserID).IsRequired();//一对多关系配置

数据库上下文配置

  • 配置数据库上下文,建立自己的MyDbContext(名字随意),继承DbContext,重写OnModelCreating(配置模型类到数据库表字段映射)和OnConfiguring(通过DbContextOptionsBuilder配置数据库连接等)方法;
  • 由于EF Core到了2.0还没有支持多对多关系的配置,所以我们要通过两个一对多关系的配置去实现:
 public class MyDbContext : DbContext
    {
        public DbSet<UserEntity> Users { get; set; }
        public DbSet<PermissionEntity> Permissions { get; set; }
        public DbSet<RoleEntity> Roles { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            
            base.OnModelCreating(modelBuilder);
            var userBuilder= modelBuilder.Entity<UserEntity>().ToTable("T_Users");
            userBuilder.Property(u => u.Email).HasMaxLength(50);
            userBuilder.Property(u => u.Name).HasMaxLength(50).IsRequired();
            userBuilder.Property(u => u.PhoneNum).HasMaxLength(20).IsRequired();

            var permissionBuilder= modelBuilder.Entity<PermissionEntity>().ToTable("T_Permissions");
            permissionBuilder.Property(p => p.Name).IsRequired().HasMaxLength(50);
            permissionBuilder.Property(p => p.Description).HasMaxLength(50);


            modelBuilder.Entity<RoleEntity>().ToTable("T_Roles");

            var userRoleRelation = modelBuilder.Entity<UserRoleEntity>().ToTable("T_UserRoleRelation");
            userRoleRelation.HasOne(m => m.User).WithMany().HasForeignKey(m => m.UserID).IsRequired();
            userRoleRelation.HasOne(m => m.Role).WithMany().HasForeignKey(m => m.RoleID).IsRequired();


            var rolePermissionRelation = modelBuilder.Entity<RolePermissionEntity>().ToTable("T_RolePermissionRelation");
            rolePermissionRelation.HasOne(m => m.Role).WithMany().HasForeignKey(m => m.RoleID).IsRequired();
            rolePermissionRelation.HasOne(m => m.Permission).WithMany().HasForeignKey(m => m.PermissionID).IsRequired();
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
            optionsBuilder.UseMySql(ConfigHelper.SqlConnStr());
        }

    }

 

数据库迁移

应用数据库迁移,根据模型类生成数据库

  • nuget安装install-package Microsoft.EntityFrameworkCore.Tools包,用于数据库迁移

 

  • 然后Add-Migration initDB,初始化数据库
  • 最后Update-Database即可生成数据库了:

 

 

转载于:https://www.cnblogs.com/lyfingchow/p/7533143.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值