この記事は公開から3年以上経過しています。
C#で.NET 5以降とEntityFrameworkCore 5を使い、Oracleから複合主キーのテーブルを読み込む方法。
サンプルソースコード
※事前にNuGetのOracle.EntityFrameworkCore
パッケージを追加しておく必要があります。
C#
using Microsoft.EntityFrameworkCore;
using System;
namespace net5ef5test
{
internal class Program
{
private static void Main(string[] args)
{
using (var dbc = new SomeDBContext())
{
//
foreach (var datum in dbc.Data)
{
Console.WriteLine($"PK1={datum.PK1}, PK2={datum.PK2}, VAL={datum.VAL}");
}
}
}
}
// エンティティ型クラス
internal class SomeTable
{
// キー列1
public string PK1 { get; set; }
// キー列2
public string PK2 { get; set; }
// 値列
public string VAL { get; set; }
}
// DbContext
internal class SomeDBContext : DbContext
{
// 結果セット
public DbSet<SomeTable> Data { get; set; }
// DbContext::OnConfiguring()
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var conStr =
"user id=ユーザーID;password=パスワード;data source=" +
"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
"(HOST=ホスト名)(PORT=ポート番号))(CONNECT_DATA=" +
"(SERVICE_NAME=サービス名)))";
optionsBuilder.UseOracle(conStr);
}
// DbContext::OnModelCreating
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// 複合主キーを使いモデルを構築
modelBuilder.Entity<SomeTable>().ToTable("SOME_TABLE").HasKey(o => new { o.PK1, o.PK2 });
}
}
}
以上です。