1、使用首先需要安装以下几个包,直接Nuget:
2、配置连接字符串,这里使用的加密算法来配置appsettings.json连接字符串
这里需要注意,填充的一定是你的连接字符串加密数据,而不是我的加密串,别混淆了
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
/***********数据库加密字符串***********/
"DBContext": "sv4VvFJ8Q9DjT1pYTb3s5cftFxB5OkExc4EozwQBqqb+cjiIgKATHdlSmGl4s6w+/QLssVzhOGtOXGQKNxjbNoQCv6O7VaLK46a9L9hRQ7iUFJwrios/iK6D/J6xfxdzs0M2ADnBYqMpOSp88m6bobD7qNstEWnxQ8nYvek="
}
}
3、在Web层ASP.NET Core项目的Startup.cs启动类的ConfigureServices方法中进行注入
/// <summary>
/// 此方法由运行时调用,使用此方法可将服务添加到容器中
/// </summary>
public void ConfigureServices(IServiceCollection services)
{
//解密数据库的加密连接字符串
string DBContext = AESKeyEncrypt.DecryptKey(Configuration.GetConnectionString("DBContext"));
services.AddDbContext<SNKContext>(options => options.UseSqlServer(DBContext));//EFCore注入
//注入自启动
services.AddControllersWithViews().AddRazorRuntimeCompilation();
}
4、到此呢,整个EFCore注入已经完成,可能你会有疑问,好像还什么都没干呢?对,确实好像什么都还没干,但我接下来说的,会让你觉得EFCore的配置,其实已经做完了。
(1)、该命令表示首次创建
Scaffold-DbContext "server=.;database=database;uid=sa;password=123456;Trusted_Connection=false;MultipleActiveResultSets=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir SNKModel
(2)、当已经创建过模型,数据库又新增数据表模型,使用-force命令进行更新
Scaffold-DbContext "server=.;database=database;uid=sa;password=123456;Trusted_Connection=false;MultipleActiveResultSets=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir SNKModel -force
5、执行命令后,自动生成模型,如图(类似):
这些均是应用程序根据连接字符串的数据库表自动生成的,对,你没有眼花,更没有看错,就是这么神奇,上图的每个类对应你的数据库每一张表,也就是说,只要你的连接字符串配置正确,输入一下命令以后,即可自动生成。怎么样,是不是相当nice!下面让你感受一下它的强大,它会根据你的外键、日期、以及Not Nulll等属性生成完全配置好的数据模型,以下是我数据库模型生成的关联属性:
modelBuilder.Entity<Depart>(entity =>
{
entity.Property(e => e.Id).HasMaxLength(200);
entity.Property(e => e.DepartName).HasMaxLength(200);
entity.Property(e => e.SorTime).HasColumnType("datetime");
});
modelBuilder.Entity<Exc>(entity =>
{
entity.Property(e => e.Id).HasMaxLength(200);
entity.Property(e => e.Data).HasMaxLength(500);
entity.Property(e => e.HelpLink).HasMaxLength(500);
entity.Property(e => e.Ip).HasMaxLength(200);
entity.Property(e => e.Message).HasMaxLength(500);
entity.Property(e => e.SorTime).HasColumnType("datetime");
entity.Property(e => e.Source).HasMaxLength(500);
entity.Property(e => e.StrackTrace).HasColumnType("text");
entity.Property(e => e.TargetSite).HasMaxLength(500);
});
modelBuilder.Entity<Log>(entity =>
{
entity.Property(e => e.Id).HasMaxLength(200);
entity.Property(e => e.Ip).HasMaxLength(200);
entity.Property(e => e.SorTime).HasColumnType("datetime");
entity.Property(e => e.Url).HasMaxLength(200);
entity.Property(e => e.Userid).HasMaxLength(200);
entity.HasOne(d => d.User)
.WithMany(p => p.Log)
.HasForeignKey(d => d.Userid)
.HasConstraintName("FK_SNK_Log_SNK_User");
});
modelBuilder.Entity<Menu>(entity =>
{
entity.Property(e => e.Id)
.HasMaxLength(200)
.HasComment("主键");
entity.Property(e => e.Icon)
.HasMaxLength(200)
.HasComment("小图标");
entity.Property(e => e.IsOpen).HasComment("展开标识");
entity.Property(e => e.ParentId)
.HasMaxLength(200)
.HasComment("父节点");
entity.Property(e => e.SorTime)
.HasColumnType("datetime")
.HasComment("排序时间");
entity.Property(e => e.TabId).ValueGeneratedOnAdd();
entity.Property(e => e.Title)
.HasMaxLength(200)
.HasComment("菜单名称");
entity.Property(e => e.Url)
.HasMaxLength(200)
.HasComment("url");
entity.HasOne(d => d.Parent)
.WithMany(p => p.InverseParent)
.HasForeignKey(d => d.ParentId)
.HasConstraintName("FK_SNK_Menu_SNK_Menu");
});
modelBuilder.Entity<Rights>(entity =>
{
entity.Property(e => e.Id).HasMaxLength(200);
entity.Property(e => e.MenuId)
.IsRequired()
.HasMaxLength(200);
entity.Property(e => e.RoleId).HasMaxLength(200);
entity.HasOne(d => d.Menu)
.WithMany(p => p.Rights)
.HasForeignKey(d => d.MenuId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_SNK_Right_SNK_Menu");
entity.HasOne(d => d.Role)
.WithMany(p => p.Rights)
.HasForeignKey(d => d.RoleId)
.HasConstraintName("FK_SNK_Right_SNK_Role");
});
modelBuilder.Entity<Role>(entity =>
{
entity.Property(e => e.Id).HasMaxLength(200);
entity.Property(e => e.RoleName).HasMaxLength(200);
entity.Property(e => e.SorTime).HasColumnType("datetime");
});
modelBuilder.Entity<Urole>(entity =>
{
entity.ToTable("URole");
entity.Property(e => e.Id).HasMaxLength(200);
entity.Property(e => e.RoleId).HasMaxLength(200);
entity.Property(e => e.UserId).HasMaxLength(200);
entity.HasOne(d => d.Role)
.WithMany(p => p.Urole)
.HasForeignKey(d => d.RoleId)
.HasConstraintName("FK__SNK_UR__rid__17F790F9");
entity.HasOne(d => d.User)
.WithMany(p => p.Urole)
.HasForeignKey(d => d.UserId)
.HasConstraintName("FK__SNK_UR__uid__17036CC0");
});
modelBuilder.Entity<Users>(entity =>
{
entity.Property(e => e.Id).HasMaxLength(200);
entity.Property(e => e.Account).HasMaxLength(200);
entity.Property(e => e.Email).HasMaxLength(200);
entity.Property(e => e.Image).HasMaxLength(200);
entity.Property(e => e.Password).HasMaxLength(200);
entity.Property(e => e.Phone).HasMaxLength(200);
entity.Property(e => e.Sex).HasMaxLength(10);
entity.Property(e => e.SorTime).HasColumnType("datetime");
entity.Property(e => e.TrueName).HasMaxLength(200);
});
你也赶快去试试吧,时间总是不等人的唷!
因篇幅问题不能全部显示,请点此查看更多更全内容