iT邦幫忙

1

.NET Core 3.1 with Oracle 12c

WM 2020-01-08 16:45:232801 瀏覽

環境:

Visual Studio 2019
Oracle 12c 使用 Docker 建立 Oracle 12c & 新增使用者建立範例資料庫
.NET Core 3.1

建立新專案

https://ithelp.ithome.com.tw/upload/images/20200108/201125732WFOpYmvFg.png

選擇API,3.1版本
https://ithelp.ithome.com.tw/upload/images/20200108/20112573yUM4Tl7VHq.png

相關套件

  • Oracle.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore v2.2.6
  • Microsoft.EntityFrameworkCore.Tools v2.2.6

https://ithelp.ithome.com.tw/upload/images/20200108/20112573p5ykOIgyL2.png

使用Scaffold-DbCoNtext產生相關的DbContext與Model

資料庫來源:使用 Docker 建立 Oracle 12c & 新增使用者建立範例資料庫
package manager輸入:

Scaffold-DbContext "User Id=ot;Password=yourpassword;Data Source=localhost:1521/ORCLCDB.localdomain;" Oracle.EntityFrameworkCore -OutputDir Data -CoNtext DataContext

關於Scaffold-DbContext參數的說明

新增的資料夾(Data)與檔案
https://ithelp.ithome.com.tw/upload/images/20200110/20112573LKoLYa98ug.png
EF Core透過繼承DbContext的DataContext與資料庫溝通。
其他的CS檔,則一一對應到資料庫的表格。

在DataContext中,我們不需要OnConfiguring方法,刪掉。
https://ithelp.ithome.com.tw/upload/images/20200108/20112573JMoNM35iUC.png

註冊連線服務

在Startup.cs中的ConfigureServices方法,註冊連線服務。
可以在其他地方利用DI(Dependency Injection)的方式,使用該服務。

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<DataContext>(options => options.UseOracle(Configuration.GetConnectionString("DefaultConnection")));
            services.AddControllers();
        }

連線字串在appsetting.json中設定

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "ConnectionStrings": {
    "DefaultConnection": "User Id=ot;Password=yourpassword;Data Source=localhost:1521/ORCLCDB.localdomain;"
  },
  "AllowedHosts": "*"
}

新增API

新增Controllers,空白or執行讀取/寫入動作的API都可以。
https://ithelp.ithome.com.tw/upload/images/20200108/201125732VNhUbHUbw.png

ValuesController

[Route("[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    private readonly DataContext _db;
    public ValuesController(DataContext db)
    {
        _db = db;
    }

    [HttpGet]
    public IActionResult Get()
    {
        var values = _db.Customers.ToList();
        return Ok(values);
    }
}

在建構式中,將DataContext注入(DI DependencyInjection),產生實體 db,並將db賦值給_db。
再使用_db對資料庫操作。

在專案中開啟命令提示字元,輸入:

dotnet watch run

執行並監看專案:
https://ithelp.ithome.com.tw/upload/images/20200110/20112573oFLlvBcuL3.png

監聽兩個port,https://localhost:5001 & http://localhost:5000

開啟Postman,在Setting將SSL關閉。
不然會收不到任何response。
https://ithelp.ithome.com.tw/upload/images/20200108/201125739NsuPOFcPg.png

使用Http GET取得https://localhost:5001/valueshttp://localhost:5000/values 的response:
https://ithelp.ithome.com.tw/upload/images/20200110/20112573TKy2LRk3Gu.png


尚未有邦友留言

立即登入留言