zoukankan      html  css  js  c++  java
  • 尝试.Net Core—使用.Net Core + Entity FrameWork Core构建WebAPI(一)

    想尝试.Net Core很久了,一直没有时间,今天回家,抛开一切,先搭建一个.Net Core的Demo出来玩玩。

    废话少说,咱直奔主题:

    一、开发环境

    VS2015 Update3 

    Microsoft .NET Core Tools(Preview 2)

    本来想用VS Code来着,但是本着最简单原理,这里先用VS 2015,我又不是受虐狂,为啥有好用的工具摆在这里不用呢,你说是吧?

    二、新建解决方案

    与ASP.NET时代没有什么区别,直接新建一个解决方案,在左边选择.NET Core, 然后项目模版选择ASP.NET Core Web Application(.NET Core) 如下图。

    image

    然后填写解决方案名称和项目名称,并选择保存路径(这和以前完全一样)。然后到了第二步,选择Web API模版,身份验证方式选择无身份验证(这里只是Demo,身份验证咱就不折腾了吧,毕竟这个往往非常复杂)。并且去掉他默认打上的Host In Cloud的勾(如果你有Azure的服务器,可以勾上)。

    image

    到此,项目就创建完毕了。你可以直接点上面的运行,把项目跑起来,会直接打开一个默认的API(ValueContrller)。

    这里我又创建了一个.NET Core的类库项目,用来作为数据库访问层,名称为DataAccess,这个跟原来.NET 时代的类库项目没有什么区别,只是需要建成.NET Core类库。

    新建完成的解决方案结构如下:

    image

    三、开始Coding

    这里我以获取本地某个数据库中Address表的前10条记录为例。

    1.新建一个实体类Address

    使其字段与数据库一一对应,记得不要忘了设置主键(Id)上面的[Key]特性标签。

    public class Address
        {
            [Key]
            public Guid Id { get; set; }
            public string OpenId { get; set; }
            /// <summary>
            /// 收件人姓名
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 详细收货地址(目前仅限与榆林学院)
            /// </summary>
            public string DetailAddress { get; set; }
            /// <summary>
            /// 联系电话
            /// </summary>
            public string Tel { get; set; }
            /// <summary>
            /// 是否默认地址
            /// </summary>
            public bool IsDefault { get; set; }
        }

    2.添加引用

    通过Nuget为项目DataAccess和WebTest引用Microsoft.EntityFrameworkCore和Microsoft.EntityFrameworkCore.SqlServer

    3.新建EF Core上下文(EFDbContext)

    public class EFDbContext: DbContext
        {
            public EFDbContext(DbContextOptions<EFDbContext> options):base(options)
            {
                
            }
            public DbSet<Address> Address { get; set; }
        }

    4.配置EFDbContext的启动项

    在Web项目的StartUp类中,找到ConfigureServices方法,新增EF的启动项,代码如下面的第一句:

    public void ConfigureServices(IServiceCollection services)
            {
                services.AddEntityFrameworkSqlServer().AddDbContext<EFDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServer")));
                // Add framework services.
                services.AddApplicationInsightsTelemetry(Configuration);
    
                services.AddMvc();
            }

    这里面有两个地方需要说明:

    • 这个方法会在项目启动的时候被调用,并且EFDbContext会被注册到ASP.NET Core自带的IOC中,以后就可以在别的地方直接注入EFDbContext了(下面会用到)。
    • Configuration.GetConnectionString("SqlServer")这是去读系统的配置,系统配置都在appsettings.json文件中,需要手动添加一下配置,添加完成后类似于:
    {
      "ConnectionStrings": {
        "SqlServer": "Data Source=localhost;Initial Catalog=database-name;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=password"
      },
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Debug",
          "System": "Information",
          "Microsoft": "Information"
        }
      }
    }

    5.WebAPI Controller

    首先,上代码~

    [Route("api/address")]
    public class AddressController : Controller
    {
        private EFDbContext _context;
        public AddressController(EFDbContext context)
        {
            _context = context;
        }
    
        [HttpGet,Route("getall")]
        public IList<Address> GetAll()
        {
            var list= _context.Address.Take(10).ToList();
            return list;
        }
    }

    下面来听我慢慢道来。

    • 首先: [Route("api/address")]这个是用来定义API的公共部分,这个如果你有过WebAPI的开发经验,这个非常容易看懂,在WebAPI中,这个会被写成[RoutePreFix("api/address")]
    • 其次,我们看到EFDbContext是通过构造函数被注入了,这个就会用到我们在上面StartUp类中所配置的信息。
    • 接下来,方法GetAll上面的特性标签[HttpGet]定义了该API的请求谓词,Route("getall")定义了该API的地址,最终,这个地址和在Controller上面的Route会共同来决定这个API的地址,本例中这个GetAll方法最终生成的API地址为:/api/address/getall
    • 接下来,使用_context对象来进行数据库操作,这个和EF是完全一样的~

    至此,我的Demo代码就写完了,直接F5运行,浏览器手动敲个地址/api/address/getall就可以访问到数据库里面的前十条数据啦~

  • 相关阅读:
    ScheduledThreadPoolExecutor 使用线程池执行定时任务
    ocals是Express应用中 Application(app)对象和Response(res)
    Spring Test 整合 JUnit 4 使用总结
    javascript创建一个基于对象的栈结构
    亲密字符串之Javascript解法
    javascript创建一个基于数组的栈结构
    整数反转
    stage1----航空票务系统需求分析报告
    实验报告
    Lamda 表达式
  • 原文地址:https://www.cnblogs.com/baiyunchen/p/5665100.html
Copyright © 2011-2022 走看看