码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2017-09-16 23:15:41      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:microsoft   功能   常用   mis   安装   ase   script   sem   role   

EF Core(Entity Framework Core)是 EF 的.net core 版本。EF Core 对 SQLServer 支持很好,
也可以在Linux下连接SQLServer。不过如果在Linux下首选MySQL,因此这次试一试MYSQL。

EFCore 的 Nuget: Microsoft.EntityFrameworkCore(一般不需要单独安装,安装mysql的包的时候会把相关依赖的包自动下载下来)。

官 方 的 mysql  ef  provider经网上查资料网友告知还有许多bug(https://www.nuget.org/packages/MySql.Data.EntityFrameworkCore/)

故采用第三方的EF Core Provider for mysql(http://www.1234.sh/post/pomelo-data-mysql),(依赖于 Pomelo.Data.MySql) 

 

  • 首先用nuget安装Pomelo.EntityFrameworkCore.MySql,建议安装最新版(增加了功能,修复了bug,我之前安装的初始版本还不支持数据库迁移migration)。EF Core中不再需要在UI项目中安装EF。
  • 建立模型实体类,本项目实现的是一个权限管理系统,建立以下表:
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方法;

由于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即可生成数据库了:

技术分享

 

技术分享

 补充说明:生成的数据库我在插入角色role的时候输入“”管理员“”插入失败,跟踪信息显示不知从哪里来的一些xE等字符,经查阅这是由于自动生成的My数据库编码为 latin1 字符集,手动将数据库编码改为utf8即可。

技术分享

 

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

标签:microsoft   功能   常用   mis   安装   ase   script   sem   role   

原文地址:http://www.cnblogs.com/lyfingchow/p/7533143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!