想尝试.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) 如下图。

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

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

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

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

三、开始Coding

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

1.新建一个实体类Address

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

  1. public class Address
  2. {
  3. [Key]
  4. public Guid Id { get; set; }
  5. public string OpenId { get; set; }
  6. /// <summary>
  7. /// 收件人姓名
  8. /// </summary>
  9. public string Name { get; set; }
  10. /// <summary>
  11. /// 详细收货地址(目前仅限与榆林学院)
  12. /// </summary>
  13. public string DetailAddress { get; set; }
  14. /// <summary>
  15. /// 联系电话
  16. /// </summary>
  17. public string Tel { get; set; }
  18. /// <summary>
  19. /// 是否默认地址
  20. /// </summary>
  21. public bool IsDefault { get; set; }
  22. }

2.添加引用

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

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

  1. public class EFDbContext: DbContext
  2. {
  3. public EFDbContext(DbContextOptions<EFDbContext> options):base(options)
  4. {
  5.  
  6. }
  7. public DbSet<Address> Address { get; set; }
  8. }

4.配置EFDbContext的启动项

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

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddEntityFrameworkSqlServer().AddDbContext<EFDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServer")));
  4. // Add framework services.
  5. services.AddApplicationInsightsTelemetry(Configuration);
  6.  
  7. services.AddMvc();
  8. }

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

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

5.WebAPI Controller

首先,上代码~

  1. [Route("api/address")]
  2. public class AddressController : Controller
  3. {
  4. private EFDbContext _context;
  5. public AddressController(EFDbContext context)
  6. {
  7. _context = context;
  8. }
  9.  
  10. [HttpGet,Route("getall")]
  11. public IList<Address> GetAll()
  12. {
  13. var list= _context.Address.Take().ToList();
  14. return list;
  15. }
  16. }

下面来听我慢慢道来。

  • 首先: [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就可以访问到数据库里面的前十条数据啦~

尝试.Net Core—使用.Net Core + Entity FrameWork Core构建WebAPI(一)的更多相关文章

  1. ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0

    ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6  将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0    将 ...

  2. [转帖]2016年时的新闻:ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0

    ASP.NET Core 1.0.ASP.NET MVC Core 1.0和Entity Framework Core 1.0 http://www.cnblogs.com/webapi/p/5673 ...

  3. Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 38 Entity Framework ...

  4. ASP.NET Core 1.0: Using Entity Framework Core

    伴随着ASP.NET Core 1.0发布的还有Entity Framework Core 1.0; 官方文档链接:https://docs.efproject.net/en/latest/platf ...

  5. [转]ASP.NET Core 1.0: Using Entity Framework Core 1.0 - Transaction

    本文转自:http://blog.csdn.net/alvachien/article/details/51576961 跟Entity Framework之前的版本不同,Class DbContex ...

  6. ASP.NET Core 1.0: Using Entity Framework Core 1.0 - Transaction

    跟Entity Framework之前的版本不同,Class DbContext不再有AcceptAllChanges()方法. 使用Transaction需要使用DbContext中的Databas ...

  7. 请问在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句?

    using dotNET.Core; using Microsoft.Extensions.Logging; using System; using System.Collections.Generi ...

  8. 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

    在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...

  9. Entity Framework Core 练习参考

    项目地址:https://gitee.com/dhclly/IceDog.EFCore 项目介绍 对 Microsoft EntityFramework Core 框架的练习测试 参考文档教程 官方文 ...

  10. Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 读取关系数据

    Reading related data¶ 9 of 9 people found this helpful The Contoso University sample web application ...

随机推荐

  1. 【大数据系列】hive安装及启动

    一.安装好jdk和hadoop 二.下载apache-hive https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.0/ 三.解压到安装 ...

  2. Linq 集合处理(Union)

    关于Union的两种情况 一.简单值类型或者string类型处理方式(集合需要实现IEnumerable接口) #region int类型 List<, , , , , }; List<, ...

  3. Python pyQt4/PyQt5 学习笔记4(事件和信号)

    信号 & 槽 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QWidget,QLCDNumber,QS ...

  4. 跟bWAPP学WEB安全(PHP代码)--PHP代码注入

    ---恢复内容开始--- 背景 今天我们换一个方式来分析这个漏洞,从渗透的角度去搞. 渗透过程 测试漏洞 先来看看,观察URL是:http://192.168.195.195/bWAPP/phpi.p ...

  5. XmlSerializer的GenerateTempAssembly性能问题例外

    XmlSerializer的两个构造函数不会出现每次构造都创建TempAssembly的性能问题,其内部做了缓存. public XmlSerializer(Type type) public Xml ...

  6. 如何查看Mac电脑的处理器核心数目-CPU的核心数目

    1.通过点击关于本机来查看

  7. C# 压缩文件 ICSharpCode.SharpZipLib.dll

    效果: 代码只能压缩文件夹里面的文件,不能压缩文件夹. 压缩前: 压缩后: 代码: 需要引用ICSharpCode.SharpZipLib.dll public ActionResult Index( ...

  8. elasticsearch的索引自动清理及自定义清理

    近发现elasticsearch近期索引文件大的吓人,清理了下之前的索引文件,发现服务器性能大大的减轻了一半,想一直保留近一个月的索引文件,但是又不想每个月手动清楚,在此写了一个小脚本 查询索引: c ...

  9. 构建一个基于UIView的类别

    很多时候,如果我们想给我们的控件赋值,例如给控件的长度.宽度等赋值,很麻烦 需要先获取到当前frame,再整个临时frame来保存,修改赋值后再还给当前的frame,这都是重复性高的苦力活,解决方法就 ...

  10. mui+vue+photoclip做APP头像裁剪上传

    做APP由于项目需要,需要做用户头像上传的功能,头像上传包括拍照和相册选择图片进行上传,这里使用的技术是mui封装的plus,在进行图片裁剪的时候,使用的是photoclip来进行裁剪,由于个人在使用 ...