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



