tnblog
首页
视频
资源
登录

asp.net core 系列之webapi集成EFCore的具体操作

7311人阅读 2020/5/31 0:33 总访问:185192 评论:0 收藏:0 手机
分类: net core

因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式,


这里记录一下,使用SQL Server数据库的方式即 UseSqlServer 的方式。


 


环境说明:


这里使用的是win 7 下的 virtual studio 2017 ,数据库使用的Sql Server


 


1.创建一个web项目

文件->新建->项目

选择 ASP.NET Core Web 应用 的模板,项目名 WebApiDemo

在新的 ASP.NET Core Web 应用的页面,选择 API 模板,并确定,不要选择支持Docker






 


 


2.增加一个实体类

右击项目,新增一个Models文件夹

在Models文件夹下增加一个类(class),TodoItem

代码如下


 


 

  1. public class TodoItem
  2.     {
  3.         public long Id { getset; }
  4.         public string Name { getset; }
  5.         public bool IsComplete { getset; }
  6.     }



 

 


3.增加一个数据库上下文实体(database context)

右键Models文件夹,增加一个类,命名 TodoContext

代码如下


 


 

  1.  public class TodoContext : DbContext
  2.     {
  3.         public TodoContext(DbContextOptions<TodoContext> options)
  4.             : base(options)
  5.         {
  6.         }
  7.         public DbSet<TodoItem> TodoItems { getset; }
  8.     }


 

 


4.注册数据库上下文实体

在 ASP.NET Core 中 ,服务(service)例如 数据库上下文(the DB context),必须被注册到 DI 容器中;


容器可以给Controller 提供 服务 (service).


 


StartUp.cs代码如下


 

 

  1.  public class Startup
  2.     {
  3.         public Startup(IConfiguration configuration)
  4.         {
  5.             Configuration = configuration;
  6.         }
  7.         public IConfiguration Configuration { get; }
  8.         // This method gets called by the runtime. Use this method to add services to the container.
  9.         public void ConfigureServices(IServiceCollection services)
  10.         {
  11.             services.AddDbContext<TodoContext>(opt =>
  12.             opt.UseSqlServer(Configuration.GetConnectionString("DemoContext")));  //使用SqlServer数据库
  13.             services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_0);
  14.         }
  15.         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  16.         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  17.         {
  18.             if (env.IsDevelopment())
  19.             {
  20.                 app.UseDeveloperExceptionPage();
  21.             }
  22.             else
  23.             {
  24.                 // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
  25.                 app.UseHsts();
  26.             }
  27.             app.UseHttpsRedirection();
  28.             app.UseMvc();
  29.         }
  30.     }

 

 


注意,这里是不同于官网教程中的地方,对比如下


ConfigureService方法中:


 

  1. //官网
  2. services.AddDbContext<TodoContext>(opt =>
  3.                 opt.UseInMemoryDatabase("TodoList"));
  4. //本教程
  5. services.AddDbContext<TodoContext>(opt =>
  6.             opt.UseSqlServer(Configuration.GetConnectionString("DemoContext")));

 


Configuration.GetConnectionString("DemoContext") 取得是 appsettings.json 文件中的 字符串,如下

appsettings.json 内容:

 


 

  1. {
  2.   "Logging": {
  3.     "LogLevel": {
  4.       "Default""Warning"
  5.     }
  6.   },
  7.   "AllowedHosts""*",
  8.   "ConnectionStrings": {
  9.    "TodoContext""Server=.;Database=WebApiDemo;pwd=123456;uid=sa" //可以根据实际情况配置数据库
  10.   }
  11. }


 

 


5.增加初始化迁移,更新数据库

此步骤,主要是使用code first 方式,在数据库中,创建相应的数据库和实体对应的表


对应 appsettings.json 文件中的连接字符串 :数据库名 WebApiDemo


工具-> NuGet 包管理器 -> 程序包管理器控制台



控制台如下:


 


命令如下:


Add-Migration Initial 

//(分开的,不是一起的)

Update-Database

 


注意,这里要求 power shell 版本 需要是3.0及以上,如果版本不够,可以自己百度然后升级power shell,这里不再详述

输入后最终生成的文件夹:

 创建的表:

如果要更新,那么就再次执行**Update-Database**就行了。

6.增加 Controller 控制器

右键 Controllers 文件夹

添加->控制器

选择 空 API 控制器,命名 TodoController ,添加

 


代码如下:


 


 

  1. [Route("api/[controller]")]
  2.     [ApiController]
  3.     public class TodoController : ControllerBase
  4.     {
  5.         private readonly TodoContext _context;
  6.         public TodoController(TodoContext context)
  7.         {
  8.             _context = context; 
  9.                 // Create a new TodoItem if collection is empty,
  10.                 // which means you can't delete all TodoItems.
  11.                 //每次运行添加一条数据,这只是为了测试方便,不用写页面提交了
  12.                 _context.TodoItems.Add(new TodoItem {Name = "zhangsan", IsComplete=true });
  13.                 _context.SaveChanges();
  14.            
  15.         }
  16.         // GET: api/Todo
  17.         [HttpGet]
  18.         public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems()
  19.         {
  20.             return await _context.TodoItems.ToListAsync();
  21.         }
  22.         // GET: api/Todo/5
  23.         [HttpGet("{id}")]
  24.         public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
  25.         {
  26.             var todoItem = await _context.TodoItems.FindAsync(id);
  27.             if (todoItem == null)
  28.             {
  29.                 return NotFound();
  30.             }
  31.             return todoItem;
  32.         }
  33.     }

 


 


这里面有两个方法,主要是为了检验是否成功创建此webapi项目


 


7.运行,输入浏览器地址检验

https://localhost:44385/api/todo


这里用户根据自己的地址替换即可


//开始运行的值

刷新就添加四条数据:


 

说明这就成功了,以后方便使用

这里作简单记录,方便自己日后查看,如有错误,欢迎指正


评价

为什么要使用webapi而不直接使用controller

彼年豆蔻,谁许谁地老天荒。webapi能做的事情,controller都能做,为什么要使用webapi而不直接使用controller呢?这就好比...

webapi转json格式

创建WebApi项目时出现的xml格式,每次都去转换比较麻烦在Global设置全局输出json格式://直接xml干掉为json GlobalConfigu...

控制台应用程序托管webapi

在没有iis的情况下,webapi是可以自托管的so,我们从写一个webapi程序开始:1、创建一个控制台应用程序,然后在控制台应用...

.net core上传图片,文件。webapi 上传图片文件

上传图片的前台代码都完全一样,直接来贴后台的代码吧publicActionResultUploadImage(List&lt;IFormFile&gt;upfile) { ...

使用swagger创建webapi文档描述---详解

在前后端分离开发中,作为后端如何给前端提供有效直观的接口文档呢?没错,就是使用swagger 俗称“丝袜哥”教程:一、首先...

通过PlUpload控件配合webapi接口完成压缩上传文件

最近一段时间都在使用PlUpload做文件上传的功能,研究过后感觉使用起来体验还是比较好的,不过网上的资料很多都记录的很简...

webapi传递大数据

在接口中传输图片进制流或BASE64字符串时,使用FormUrlEncodedContent处理参数时,可能会因为参数太长导致异常无效的URL:U...

AJAX调用webapi上传图片或文件。设置token,设置Authorization Bearer

AJAX调用webapi上传图片或文件,并返回刚上传的文件名。废话不多说直接贴代码吧html相关:&lt;!DOCTYPEhtml&gt; &lt;html&...

webapi与rpc区别

首先说rpc,rpc的定义是远程过程调用,通俗讲就是客户端通过网络远程调用服务端的方法,比如一个用java写的method。rpc是基...

.net HttpClient和webapi相关的东东先记录一点。传递Authorization headertoken

get请求传递Authorization header,tokenstringurl=&quot;你请求的url&quot;; stringtoken=&quot;yourtoken&quot;; Http...

webapi报错:Attribute routes with the same name 'Get' must have the same template

是因为 asp.net core 中默认创建的 api controller 中的 Get(id) Action的属性都是[HttpGet(&quot;{id}&quot;, Name = &quo...

net core webapi版本控制

webapi的版本控制好处很多,要实现其实也比较简单。在webapi中根据不同的版本创建文件夹。然后在不同的api里边添加不同的路...

net core webapi路由

如下我们可以通过路由传递两个参数请求地址参考如下: https://localhost:5001/api/home/aojiancc2/2622最后两个可以作为参...

.net webapi Newtonsoft.Json返回需要的字段,忽略某些字段,修改字段名,动态返回需要的字段等

有时候我们在写webapi的时候,不想把正常用的对象所有字段都返回,我们需要进行一些筛选,忽略某些字段,大概说一下几种方法...

.net core webapi json相关,全局配置,时间格式化首字母小写等

在ConfigureServices中可以进行全局json配置,例如,全局处理一下事件格式问题services.AddMvc(option=&gt; { //option.F...
人若没梦想,那跟咸鱼有啥样
排名
20
文章
32
粉丝
7
评论
21
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
如果你仲记得我,就返转头啦。