欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net core 系列之webapi集成EFCore的简单操作教程

程序员文章站 2022-05-08 08:15:31
因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式, 这里记录一下,使用SQL Server数据库的方式即 UseSqlServer 的方式。 环境说明: 这里使用的是win 7 下的 virtual studio 20 ......

 

因为官网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

asp.net core 系列之webapi集成EFCore的简单操作教程

 

asp.net core 系列之webapi集成EFCore的简单操作教程

 

 asp.net core 系列之webapi集成EFCore的简单操作教程

 

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 包管理器 -> 程序包管理器控制台

asp.net core 系列之webapi集成EFCore的简单操作教程

 

控制台如下:

asp.net core 系列之webapi集成EFCore的简单操作教程

 

命令如下:

add-migration initial
update-database

 

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

 

6.增加 controller 控制器

  • 右键 controllers 文件夹
  • 添加->控制器
  • 选择 空 api 控制器,命名 todocontroller ,添加

asp.net core 系列之webapi集成EFCore的简单操作教程

 

代码如下:

[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

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

asp.net core 系列之webapi集成EFCore的简单操作教程

 

 

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

 

参考网址:

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