ASP.NET Core ----ASP.NET Core中使用Code First

开发工具:vscode ,vs2017

语言:net core 2.1

数据库:sql server 2014

1 创建.net core项目

打开vscode,按快捷键ctrl+shift+~,打开powershell终端。创建.net core,输入命令

--新建一个文件夹:md corefirst

--创建.net core MVC模板:dotnet new MVC(如图所示,创建成功,如果没有成功,请安装net core sdk)

接着输入 dotnet run,看运行效果,.net core2.0之后启用https,即将下图中http://localhost:5000https://localhost:5001,在浏览器打开也会看到相对应的结果

2 创建Code First模板

然后用我们宇宙第一的IDE vs打开刚创建的这个mvc项目。我这里使用vs2017。
打开刚创建的项目,在解决方案上线新建一个项目,选择.NET Standard(不知道什么的点这里好好阅读一下)模板,创建一个类库名称叫EFDbServices。在EFDbServices中新建一个Class,我这里新建的叫EFDataContext,且这个类继承DbContext,需要在NuGet中引用Microsoft.EntityFrameworkCore,这里可以直接在NuGet管理器中输入

Install-Package Microsoft.EntityFrameworkCore -Version 3.0.0-preview.18572.1添加引用

新建一个ModelBaseClassLib这个基类,代码如下:

 

  public class ModelBaseClassLib
    {
        /// <summary>
        /// 主键
        /// </summary>
        [Key]
        public int ID { get; set; }
        /// <summary>
        /// 是否删除
        /// </summary>
        public bool IsDeleted { get; set; } = false;
        /// <summary>
        /// 添加人
        /// </summary>
        public int InsertBy { get; set; }
        /// <summary>
        /// 添加时间
        /// </summary>
        public DateTime InsertDateTime { get; set; } = DateTime.Now;
        /// <summary>
        /// 编辑人
        /// </summary>
        public int UpdateBy { get; set; }
        /// <summary>
        /// 编辑时间
        /// </summary>
        public DateTime UpdateDateTime { get; set; }
        /// <summary>
        /// 删除人
        /// </summary>
        public int DeleteBy { get; set; }
        /// <summary>
        /// 删除时间
        /// </summary>
        public DateTime DeleteDateTime { get; set; }
    }

创建UserManagement和RoleManagement分别继承自ModelBaseClassLib,代码如下:
UserManagement.cs

   public class UserManagement: ModelBaseClassLib
    {
       
        /// <summary>
        /// 姓名
        /// </summary>
        [MaxLength(100)]
        [Required, Column("UserNmae")]
        public string UserNmae { get; set; }

        /// <summary>
        /// 登录编号
        /// </summary>
        [MaxLength(20)]
        [Required, Column("UserLoginCode")]
        [Unique]
        public string UserLoginCode { get; set; }
        /// <summary>
        /// 登录密码
        /// </summary>
        [MaxLength(40)]
        [Required, Column("UserLoginPwd")]
        public string UserLoginPwd { get; set; }

        public virtual IList<RoleManagement> Role_Ids { get; set; }


    }

RoleManagement.cs

  public class RoleManagement : ModelBaseClassLib
    {
        /// <summary>
        /// 角色编码
        /// </summary>
        [MaxLength(50)]
        [Required, Column("RoleCode")]
        [Unique]
        public string RoleCode { get; set; }        
        /// <summary>
        /// 角色名称
        /// </summary>
        [MaxLength(50)]
        [Required, Column("RoleName")]
        [Unique]
        public string RoleName { get; set; }
    }

 code first添加唯一性约束(Unique)

  [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class UniqueAttribute : ValidationAttribute
    {
        public override Boolean IsValid(Object value)
        {
            return true;
        }
    }

修改EFDataContext.cs

 public class EFDataContext:DbContext
    {
        public EFDataContext(DbContextOptions<EFDataContext> options):base(options) {}
        public DbSet<UserManagement> userManagements { get; set; }
        public DbSet<RoleManagement>  roleManagements { get; set; }
    }

3 添加依赖注入,生成数据库

在corefirst这个解决方案中修改appsettings.json,众所周知,net core中已经没有了web.config,所有配置都是在appsettings.json进行配置。

在appsettings.json中添加sql server连接字符串。

 添加一个新的节点ConnectionStrings,在这个节点下添加 "Connection": "Data Source=.;Initial Catalog=EFCoreFirst;User ID=sa;Password=123456",完整的appsettings.json如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionString": {
    "Connection": "Data Source=.;Initial Catalog=EFCore;User ID=sa;Password=123456"
  }
}

.net core中已经没有了Global.asax这个一般处理程序,代替它的是一个全新的Startup.cs这样一个启动类,net core中涉及到所有的操作,都需要在这个文件中注入,比如常见的cookie,session,json,xml等,我这里需要做code first,就需要对DbContext这个类做注入。

net core读取appsettings需要借助IConfiguration这个接口。

读取刚才配置的字符串
 string _connectionString = Configuration.GetSection("ConnectionString")["Connection"];

添加注入,(需要引用using Microsoft.EntityFrameworkCore)

添加刚创建的EFDataContext类

services.AddDbContext<EFDataContext>()

使用sql server数据库

 services.AddDbContext<EFDataContext>(o=> {
                o.UseSqlServer(_connectionString);
            });

设置迁移配置,将EF的模板的命令空间迁移到当前注入中

 services.AddDbContext<EFDataContext>(o=> {
                o.UseSqlServer(_connectionString,s=> {
                    s.MigrationsAssembly("EFDbServices");
                });
            });

以上可简写为:

   services.AddDbContext<EFDataContext>(options =>
            options.UseSqlServer(_connectionString, b =>
            b.MigrationsAssembly("EFDbServices")));
            services.AddMvc();

然后执行Add-Migration core01。如图

再执行update-database,这样数据库和表就创建成功。

 

以上源打码已经打包放到github,有需要的可以进行下载。https://github.com/LZZSF/corecodefitsrt

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值