1. 程式人生 > >.netcore中使用EFCore連線SQL Server並部署至Ubuntu

.netcore中使用EFCore連線SQL Server並部署至Ubuntu

前面一篇記錄瞭如何在windows下開發asp.net core程式,並部署至ubuntu系統中。但僅僅是建立了一個demo專案,專案本身並沒有實現多少功能。多數時候,我們的專案是要和資料庫打交道。EntityFramework作為微軟提供的基於ADO.NET的ORM解決方案,在dotnet core中,輕量級的EFCore也已經發布。話不多說,直接操作。

1.專案中新增引用

新建asp.net core web應用程式,右鍵專案,選擇NuGet管理,搜尋Microsoft.EntityFrameworkCore.SqlServer,Microsoft.EntityFrameworkCore.Tools兩個包進行安裝。

2.VS選單上的工具-->NuGet包管理器-->程式包管理器控制檯,開啟控制檯後,輸入如下程式碼,建立上下文(DBContext)

Scaffold-DbContext "資料庫連線字串" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables Employee

資料庫連線字串,和使用ado.net連線資料庫時,web.config中配置的連線字串一樣。連線到你的資料庫伺服器即可。-Tables 可以用來指定針對資料庫中某個或某幾個表生成實體類,如果不加這個引數,會將資料庫裡的所有表生成實體。注意:如果專案所在目錄有中文的話,這條命令執行可能會報錯。

命令執行完成後你會發現,專案下多了一個Models目錄,並且多了兩個檔案:MyDbContext.cs和Employee.cs。開啟MyDbContext.cs檔案,找到OnConfiguring方法,將其註釋掉。

3.通過依賴關係注入上下文

開啟Startup.cs檔案,新增Microsoft.EntityFrameworkCore引用。找到ConfigureServices方法,在該方法末尾加入以下兩行程式碼。MyDbContext需要新增應用(放在專案下的Models中),

var connection = @"資料庫連線字串";
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(connection));

好了,接下來就可以在控制器中使用MyDbContext了。我們可以在專案自帶的ValuesController中加一個方法,來試試看。在ValuesController中新增如下程式碼,並修改ValuesCotroller預設的路由方案

[Route("api/[controller]")]

改為

[Route("api/[controller]/[action]")] 

ValuesController新增下面程式碼,用來獲取Employee表中的資料。

        private readonly MyDbContext _context;

        public ValuesController(MyDbContext context)
        {
            _context = context;
        }

        [HttpGet]
        public IEnumerable<Employee> GetEmployees()
        {
            return _context.Employee.ToList();
        }

執行專案,在瀏覽器地址後面輸入路由規則 localhost:xxxxx/api/values/GetEmployees 返回如下內容

恭喜你,已經成功將資料庫中Employee表中資料取出,返回成json格式。

4. 打包並部署至ubuntu

可以參考上一篇中的步驟,將專案部署至ubuntu系統中。這裡需要注意的是,如果你其他功能訪問正常,但連線資料庫時出錯(通過supervisor配置的輸出日誌/var/log/youapp.out.log 檢視錯誤),檢查你的資料庫版本。需要SQL Server2008R2 sp3版本以上才可以,如果你時sql server 2008R2,可以通過下面連線下載補丁包安裝,完成後重啟sqlserver服務即可。

補丁下載:

https://www.microsoft.com/en-us/download/details.aspx?id=44271

參考連線:

https://docs.microsoft.com/zh-cn/ef/core/get-started/aspnetcore/existing-db

http://www.cnblogs.com/weiweithe/p/7810803.html