P1 准备工作

P1 准备工作


P1 准备工作
三者的依赖关系
P1 准备工作

P1 准备工作
上面输入Asp.net core进行搜索
P1 准备工作
3.0的api模板现在比较简洁,以前博主是倾向于直接选择Empty的项目。
P1 准备工作
创建后的项目比较简洁,带了一个Controller还有一个modle
P1 准备工作
这是一个modle类
P1 准备工作
它是一个简单的Controller
P1 准备工作

这两个都是用来演示的,我们不需要直接删掉就可以了
P1 准备工作

Program类

这个类比较重要。
P1 准备工作
Main方法负责配置和运行整个web程序
下面这个方法会实现IHosetBuilder的对象。
P1 准备工作
实际创建出来的就是HostBuilder的实例
P1 准备工作
有了HostBuilder以后,再使用它的Build方法,就可以创建出来这个数组,
P1 准备工作
创建的这个数组,实现了IHost这个接口。
P1 准备工作
最后调用数组上的Run方法来运行我们这个web程序。这里的代码就暂时先不改了。
项目在建立之后,实际上是进行了一些默认的配置。在源码中可以看到。这里就先不看了。

我们主要注重看这一行代码。这里使用到了Startup这个类。
P1 准备工作
Startup类主要就两个方法
P1 准备工作
它有一个构造函数,注入了IConfiguration。有了IConfiguration我们就可以使用配置信息了。例如Appsetting.json里面的配置信息就可以用。
P1 准备工作

.net core有服务的容器,这个方法就是向服务的容器注入服务。已经注册的服务就可以通过依赖注入的方式,在整个应用程序的其他地方进行使用。
P1 准备工作
AddController仅仅是包含了构建API的服务。在.net core 2.0的时候我们这里是写的AddMvc()但是在3.0里面包含了很多的东西,我们并不需要。
P1 准备工作

configure方法

主要指定.net core程序是如何响应http请求的,换句话就是我们在这里配置请求的管道。怎么配置呢,就是在这里添加很多的中间件。

这里的每一个Use就相当于添加了一个中间件
P1 准备工作
IsDevelopment判断当前是不是开发环境。如果是的话,在发生异常的时候就会返回一个错误页面,
P1 准备工作
UseAuthorization为整个应用程序添加了授权的能力。通常授权的配置是在ConfiureServices方法里面来完成的
P1 准备工作
修改启动
P1 准备工作

相当于是点了项目右键属性,然后找到dubug
P1 准备工作

这是默认的配置
P1 准备工作

相当于是删除了这些

P1 准备工作
都删除就剩下这些
P1 准备工作

运行程序

页面是404,这是因为我们把默认的Controller给删掉了。
P1 准备工作
我们先不改了 因为我们还没有创建Controller
P1 准备工作

数据库

使用sqlite然后使用EF
现在需要在项目里面添加EF core和 sqlite
P1 准备工作

Microsoft.EntityFrameworkCore
P1 准备工作
Tools是用来做迁移用的
P1 准备工作

创建model

创建文件夹entities
P1 准备工作

创建Comnany的类
P1 准备工作
公司类,里面有员工Employee。
P1 准备工作
创建Employee类。用的是Resharp的快捷键
P1 准备工作
用Resharp的快捷键移动到单独的类里面。
P1 准备工作
代码提前写好,放进来
P1 准备工作
性别是一个枚举类。
P1 准备工作

 

public enum Gender
    {
        男=1,
        女=2
    }

 


关联 的导航属性
P1 准备工作

创建DbContext

创建一个Data文件夹,然后创建RoutineDbContext
P1 准备工作
对实体的属性值进行一些 限制,重写OnModelCreating方法
P1 准备工作
指向Company这个实体,它的name属性,首先是必填的 。然后长度是100
P1 准备工作
其他的属性写完这段代码 ,
P1 准备工作

modelBuilder.Entity<Company>().Property(x => x.Name).IsRequired().HasMaxLength(100);
            modelBuilder.Entity<Company>().Property(x => x.Introduction).IsRequired().HasMaxLength(500);

            modelBuilder.Entity<Employee>().Property(x => x.EmployeeNo).IsRequired().HasMaxLength(10);
            modelBuilder.Entity<Employee>().Property(x => x.FirstName).IsRequired().HasMaxLength(50);
            modelBuilder.Entity<Employee>().Property(x => x.LastName).IsRequired().HasMaxLength(50);

            modelBuilder.Entity<Employee>().HasOne(x => x.Company)
                .WithMany(x => x.Employees)
                .HasForeignKey(x => x.CompanyId).OnDelete(DeleteBehavior.Restrict);

 


手动指明了这两个实体的一对多的关系
P1 准备工作
在删除公司的时候,如果公司下有员工的话就没法删除。这是禁制级联删除
P1 准备工作
DbContext需要DbContextOptions这个参数才能工作。在构造函数里面,将这个配置传递进去。
P1 准备工作
把这两个实体映射到数据库的表内。
P1 准备工作

还可以初始化数据:https://github.com/Surbowl/ASP.NET-Core-RESTful-Note/blob/master/Routine/Routine.APi/Data/RoutineDbContext.cs
P1 准备工作

 

Repository

首先是创建Services文件夹
P1 准备工作
先创建接口类
P1 准备工作
这段代码没录,写好放进去
P1 准备工作
最后保存的动作也在了Repository里面了。
P1 准备工作

Repository实现类

创建CompanyRepository实现刚才写的接口类ICompanyRepository


P1 准备工作


构造函数内注入DbContext
P1 准备工作

开始写具体方法的内的代码

P1 准备工作

要注意的地方,方法要用async来修饰我们当前这个方法,下面在查询的时候才可以使用await 异步的形式。

P1 准备工作

P1 准备工作
更新,不写也行,EF Core是争对实体进行跟踪的,
P1 准备工作


P1 准备工作

员工部分
P1 准备工作

获取公司下面的某一个员工
P1 准备工作
添加员工
P1 准备工作
更新员工,因为属性是动态跟踪的,所以不用写这行代码了。
P1 准备工作
删除和保存。

注意保存SaveChangesAsync()这里判断的是大于等于0
P1 准备工作
保存通常不写在Repository里面
P1 准备工作

注册


P1 准备工作
注册DbContext。在里面我们可以有一些配置
P1 准备工作
使用Sqlite然后里面放上链接字符串。
P1 准备工作

遇到的问题,找不到UseSqlite方法

option.Use就是没有找到带UseSql开头的。很是郁闷。

P1 准备工作

刚开始以为是nuget引用的包的版本太高了引起的,后来换门降低了版本到3.1.10

P1 准备工作

后来经过搜索:

https://stackoverflow.com/questions/43098065/entity-framework-core-dbcontextoptionsbuilder-does-not-contain-a-definition-for

三个步骤,1。首先安装所依赖的包, 2是引用EntityFrameworkCore的命名空间 3,使用UseSqlServer的方法。

P1 准备工作

发现引入命名空间using Microsoft.EntityFrameworkCore;果然可以找到UseSqlite的方法了。

P1 准备工作

 

 

继续代码

 

每次运行删除数据库并重新迁移。在Program.cs类内。
P1 准备工作

P1 准备工作

注意引入命名空间using Microsoft.Extensions.DependencyInjection; 主要是Services需要引入这个命名空间

P1 准备工作

P1 准备工作

 

P1 准备工作


加入异常
P1 准备工作

迁移

P1 准备工作


P1 准备工作

也可以在这里找到包管理器的控制台

P1 准备工作

添加迁移的命令:Add-Migration InitialMigration

P1 准备工作

我本人的机器迁移后

P1 准备工作

 


生成了两个类,一个是迁移的变化,再就是当前数据库的快照。
P1 准备工作

运行

可以看到控制台输出了一些代码

P1 准备工作

这里的日志都是绿色的info级别的log,说明都成功了。

P1 准备工作

我本机运行程序后,并没有输出那些sql语句

P1 准备工作

根目录出现了一个db文件,数据库出来了 说明迁移已经成功了。
P1 准备工作

打开后添加一个数据源
P1 准备工作
找到这个db文件

P1 准备工作

测试连接

P1 准备工作

已经有三条数据了
P1 准备工作

 

我本机打开数据库

P1 准备工作

 

结束

 

相关文章: