想尝试.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]特性标签。

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().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就可以访问到数据库里面的前十条数据啦~

尝试.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. Android开发训练之第五章第四节——Syncing to the Cloud

    Syncing to the Cloud GET STARTED DEPENDENCIES AND PREREQUISITES Android 2.2 (API level 8) and higher ...

  2. Android设计和开发系列第二篇:Action Bar(Design)

    Action Bar The action bar is a dedicated piece of real estate at the top of each screen that is gene ...

  3. 今日Java——Cay Horstmann访谈

    这是本人在InfoQ中文站审校的文章,原文链接是:http://www.infoq.com/cn/articles/java_cay_horstmann,感觉内容很不错,分享给大家看看. 近日Info ...

  4. 【Spring Boot&&Spring Cloud系列】Spring Boot中使用数据库之MySql

    对于传统关系型数据库来说,Spring Boot使用JPA(Java Persistence API)资源库提供持久化的标准规范,即将Java的普通对象通过对象关系映射(ORM)持久化到数据库中. 项 ...

  5. html2canvas - 微信中长按存图 - 将h5活动结果保存到本地

    现在有很多在微信里流行的h5活动页.这些小h5大部分都是简单的交互然后得出一个abcd早就拟定好的结果,根据你的选项分几种情况,最终得到其中一个作为你测试的答案.比如这个就是最后那张结果图: 当时自己 ...

  6. Python GUI编程之WxPython

    https://en.wikipedia.org/wiki/WxPython 官网: Overview of wxPython: https://wxpython.org/pages/overview ...

  7. ubuntu 重启网络方法--通过杀死进程重启网络

    重启网络方法(通过杀死进程方式,达到网络重启) zh@zh:~$sudo NetworkManager restart //查看进程idNetworkManager 已正运行(pid 10254)zh ...

  8. openvpn 多机房互联

    Server端安装配置 一.安装 1.下载及相关依赖包安装 wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz ...

  9. TX大手笔做业务必然失败的原因

    首先说一个伪命题: 物体会向下落这是一个基本的定律,一个小小的物理规则会覆盖所有物体的行为准则. 那么,当地球上的所有东西都下落的时候,你指望整个地球,月球,太阳也会下落么? 事实上大家都知道星球在宇 ...

  10. JVM源码分析之javaagent原理完全解读

    概述 本文重点讲述javaagent的具体实现,因为它面向的是我们Java程序员,而且agent都是用Java编写的,不需要太多的C/C++编程基础,不过这篇文章里也会讲到JVMTIAgent(C实现 ...