嘗試.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就可以訪問到數據庫里面的前十條數據啦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM