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

然后填写解决方案名称和项目名称,并选择保存路径(这和以前完全一样)。然后到了第二步,选择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(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就可以访问到数据库里面的前十条数据啦~

时间: 2024-10-10 09:03:47

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

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

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

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    将改名为 Entity Framework Core 1.0 .NET新的跨平台版本将命名为.NET Core 1.0 新版本的ASP.NET和Entity Framework有一个严重的问题,就是它们同以前的版本不兼容.这不只是行为或API稍有差异的事,而基本上是进行了完全的重写,去掉了大量的功能.

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

http://www.cnblogs.com/webapi/p/5673104.html ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6  将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0    将改名为 Entity Framework Core 1.0 .NET新的跨平台版本将命名为.NET Core 1.0 新版本的ASP.NET和Entity Framework有一个严重的问题,就是它们同以前的版

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

using dotNET.Core; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; namespace dotNET.EFCoreRepository { /// <summary> /// ef 日志 /// </summary> public class EFLogge

Entity Framework Core 在 .NET 4.6 与 .NET Core 的初体验

这篇会使用 Visual Studio 2015 + .NET 4.6.2 建立 Console 程序来尝试 EF Core, 同时也会使用 dotnet?+?.NET Core 1.0?建立 Console 程序来尝试 EF Core. Visual Studio 2015 或?Visual Studio Code 只是整合开发工具,与搭配哪种 Framework(.NET Core 1.0,?.NET Framework 4.6) 是没有限制的. 让我们从熟悉的 Visual Studio

Entity Framework Core系列教程-6-查询数据

Entity Framework Core中的查询 Entity Framework Core中的查询与EF 6.x中的查询相同,但具有更优化的SQL查询,并且能够将C#/ VB.NET函数包含在LINQ到实体查询中. Entity Framework Core 允许你在模型中使用导航属性来加载相关实体. 有三种常见的 O/RM 模式可用于加载关联数据: Eager loading (预先加载): 表示从数据库中加载关联数据,作为初始查询的一部分. Explicit loading(显式加载):

Entity Framework Core 2.0 入门简介

不多说废话了, 直接切入正题. EF Core支持情况 EF Core的数据库Providers: 此外还即将支持CosmosDB和 Oracle. EFCore 2.0新的东西: 查询: EF.Functions.Like() Linq解释器的改进 全局过滤(按类型) 编译查询(Explicitly compiled query) GroupJoin的SQL优化. 映射: Type Configuration 配置 Owned Entities (替代EF6的复杂类型) Scalar UDF映

.Net Entity Framework Core 用 HasColumnType 配置浮点数精度

一.前言 前段时间用.Net Entity Framework core搭建框架,需要配置浮点数的精度,发现.Net Entity Framework core 并没有HasPrecision方法.在网上查找资料也比较少,最后通过官方文档说明,尝试使用HasColumnType配置浮点数精度成功. 二.HasColumnType官方文档说明 文档连接: https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.entityframeworkcor

使用Entity Framework Core需要注意的一个全表查询问题

.NET Core 迁移工作如火如荼,今天在使用 Entity Frameowork Core(又名EF Core)时写了下面这样的 LINQ 查询表达式: .Where(u => u.Id == new Guid(userId)).FirstOrDefaultAsync(); 结果在 SQL Server Profiler 中发现竟然进行了全表查询. 之后将 new Guid(userId) 从表达式中移出,保存于一个局部变量中,使用这个局部变量进行查询,全表查询问题就解决了. var use

UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软推荐使用Sqlite吧! 2,简单!就只有一个类库没有多余的参照什么的.不像其他数据库还得做复杂配置什么的麻烦! 3,不需要数据库服务,数据服务和客户都在同一个进程里面.如下图: 4,作为存储系统它只支持一个用户一个数据实体. 5,跨平台跨结构,这个好! Sqlite主要使用内容 如果想充分使用好S