本文章是根据 微软MVP solenovex(杨旭)老师的视频教程编写而来,再加上本身的一些理解。
视频教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR
GitHub源码:https://github.com/hllive/LearnEFCore3.1git
Entity Framework Core就是一个ORM,什么是ORM?Entity Framework Core能把C#里的类映射到数据库里的表,而后属性就映射到字段上。
Entity Framework Core 3.1 是微软长期支持版本,3.1是一个长期支持的版本,并且从EFcore3.0开始是向后开辟了一个新时代。由于3.0和2.0之间的差别仍是比较大,因此学3.1是一个比较好的选择。在2020年末NET5出来以后,也应该出来一个相应的版本,可是跟这个3.1差异应该不会太大。
首先建三个Model或在数据库中建三张表。
假如是一个足球联赛,其包括:League(联赛),Club(足球队、俱乐部),Player(运动员) 三个都是一对多的关系github
在Models项目中添加三个Model :League(联赛),Club(足球队、俱乐部),Player(运动员)。
建好三个模型后,在Data类库引用Models类库web
// 联赛 public class League { public Guid Id { get; set; } public string Name { get; set; } public string Country { get; set; }//国家 }
//运动员 public class Player { public Guid Id { get; set; } public string Name { get; set; } public DateTime Birth { get; set; } }
//足球队 public class Club { public Club() { Players = new List<Player>();//为了之后使用不会遇到空引用 } public Guid Id { get; set; } public string Name { get; set; } public string City { get; set; } public DateTime DateOfEstablishment { get; set; }//成立日期 public string History { get; set; }//历史成绩 public League League { get; set; }//联赛 public List<Player> Players { get; set; }//运动员列表 }
在Data类库中经过NuGit安装两个包数据库
将Model映射到数据库里,首先要创建一个AppDbContext类,在Data类库中;这个类须要继承DbContext。
AppDBcontext中包括包含了全部逻辑,好比与数据库交互、数据变化追踪等
为让三个Model能在Context中正常工做,将三个Model暴露成DbSet类型json
public class AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } public DbSet<League> Leagues { get; set; } public DbSet<Club> Clubs { get; set; } public DbSet<Player> Players { get; set; } }
三个Model写好后,还须要将类映射到数据中,也就是映射数据库的三个表,与数据库链接就须要数据库链接字符串
在WebApi应用程序中的appsettings.json文件中添加以下配置:app
"ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=EFCoreDb;Trusted_Connection=True;MultipleActiveResultSets=true" }
在Startup类的ConfigureServices方法下注入数据库上下文依赖ide
services.AddDbContext<AppDbContext>(optionsAction => optionsAction.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
博客文章能够转载,但不能够声明为原创ui