asp.net core 系列之webapi集成EFCore的简单操作教程
因为官网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
代码如下
public class todoitem { public long id { get; set; } public string name { get; set; } public bool iscomplete { get; set; } }
3.增加一个数据库上下文实体(database context)
- 右键models文件夹,增加一个类,命名 todocontext
代码如下
public class todocontext : dbcontext { public todocontext(dbcontextoptions<todocontext> options) : base(options) { } public dbset<todoitem> todoitems { get; set; } }
4.注册数据库上下文实体
在 asp.net core 中 ,服务(service)例如 数据库上下文(the db context),必须被注册到 di 容器中;
容器可以给controller 提供 服务 (service).
startup.cs代码如下
public class startup { public startup(iconfiguration configuration) { configuration = configuration; } public iconfiguration configuration { get; } // this method gets called by the runtime. use this method to add services to the container. public void configureservices(iservicecollection services) { services.adddbcontext<todocontext>(opt => opt.usesqlserver(configuration.getconnectionstring("democontext"))); //使用sqlserver数据库 services.addmvc().setcompatibilityversion(compatibilityversion.version_2_2); } // this method gets called by the runtime. use this method to configure the http request pipeline. public void configure(iapplicationbuilder app, ihostingenvironment env) { if (env.isdevelopment()) { app.usedeveloperexceptionpage(); } else { // the default hsts value is 30 days. you may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.usehsts(); } app.usehttpsredirection(); app.usemvc(); } }
注意,这里是不同于官网教程中的地方,对比如下
configureservice方法中:
//官网
services.adddbcontext<todocontext>(opt => opt.useinmemorydatabase("todolist"));
//本教程 services.adddbcontext<todocontext>(opt => opt.usesqlserver(configuration.getconnectionstring("democontext")));
configuration.getconnectionstring("democontext") 取得是 appsettings.json 文件中的 字符串,如下
appsettings.json 内容:
{ "logging": { "loglevel": { "default": "warning" } }, "allowedhosts": "*", "connectionstrings": { "todocontext": "server=(localdb)\\mssqllocaldb;database=webapidemo;trusted_connection=true;multipleactiveresultsets=true" } }
5.增加初始化迁移,更新数据库
此步骤,主要是使用code first 方式,在数据库中,创建相应的数据库和实体对应的表
对应 appsettings.json 文件中的连接字符串 :数据库名 webapidemo
- 工具-> nuget 包管理器 -> 程序包管理器控制台
控制台如下:
命令如下:
add-migration initial update-database
注意,这里要求 power shell 版本 需要是3.0及以上,如果版本不够,可以自己百度然后升级power shell,这里不再详述
6.增加 controller 控制器
- 右键 controllers 文件夹
- 添加->控制器
- 选择 空 api 控制器,命名 todocontroller ,添加
代码如下:
[route("api/[controller]")] [apicontroller] public class todocontroller : controllerbase { private readonly todocontext _context; public todocontroller(todocontext context) { _context = context; if (_context.todoitems.count() == 0) { // create a new todoitem if collection is empty, // which means you can't delete all todoitems. _context.todoitems.add(new todoitem { name = "item1" }); _context.savechanges(); } } // get: api/todo [httpget] public async task<actionresult<ienumerable<todoitem>>> gettodoitems() { return await _context.todoitems.tolistasync(); } // get: api/todo/5 [httpget("{id}")] public async task<actionresult<todoitem>> gettodoitem(long id) { var todoitem = await _context.todoitems.findasync(id); if (todoitem == null) { return notfound(); } return todoitem; } }
这里面有两个方法,主要是为了检验是否成功创建此webapi项目
7.运行,输入浏览器地址检验
https://localhost:44385/api/todo
这里用户根据自己的地址替换即可
这里作简单记录,方便自己日后查看,如有错误,欢迎指正
参考网址:
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.2&tabs=visual-studio
https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/model?view=aspnetcore-2.2&tabs=visual-studio