环境:
Visual Studio 2019
Oracle 12c 使用 Docker 建立 Oracle 12c & 新增使用者建立範例资料库
.NET Core 3.1
建立新专案
选择API,3.1版本
相关套件
Oracle.EntityFrameworkCoreMicrosoft.EntityFrameworkCore v2.2.6Microsoft.EntityFrameworkCore.Tools v2.2.6使用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)与档案
EF Core透过继承DbContext的DataContext与资料库沟通。
其他的CS档,则一一对应到资料库的表格。
在DataContext中,我们不需要OnConfiguring方法,删掉。
注册连线服务
在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都可以。
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
执行并监看专案:
监听两个port,https://localhost:5001 & http://localhost:5000
开启Postman,在Setting将SSL关闭。
不然会收不到任何response。
使用Http GET取得https://localhost:5001/values 或 http://localhost:5000/values 的response: