开发工具: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:5000和https://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