首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# Entity Framework 連接 Oracle:ODP.NET Managed Driver 完整設定指南

     編輯:程式設計綜合問答

核心元件:Oracle.ManagedDataAccess.EntityFramework

**不需安裝 Oracle Client**,純 Managed 程式碼,透過 NuGet 即可完成所有設定。

步驟 1:安裝 NuGet 套件

Install-Package Oracle.ManagedDataAccess.EntityFramework

會自動安裝相依套件:Oracle.ManagedDataAccess、EntityFramework (若專案尚未有)。

步驟 2:App.config / Web.config 設定


  
    

步驟 3:DbContext 實作

public class OracleDbContext : DbContext {
    public OracleDbContext() : base("name=OracleDbContext") { }

    public DbSet Employees { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.HasDefaultSchema("SCOTT"); // 對應 Oracle Schema
        base.OnModelCreating(modelBuilder);
    }
}

[Table("EMP")]
public class Employee {
    [Key, Column("EMPNO")]
    public int EmpNo { get; set; }

    [Column("ENAME")]
    public string Name { get; set; }

    [Column("JOB")]
    public string Job { get; set; }

    [Column("SAL")]
    public decimal Salary { get; set; }
}

步驟 4:CRUD 範例

using (var db = new OracleDbContext()) {
    // Create
    var emp = new Employee { EmpNo = 9999, Name = "TEST", Job = "CLERK", Salary = 3000 };
    db.Employees.Add(emp);
    db.SaveChanges();

    // Read
    var list = db.Employees.Where(e => e.Salary > 2000).ToList();

    // Update
    var e = db.Employees.Find(9999);
    e.Salary = 3500;
    db.SaveChanges();

    // Delete
    db.Employees.Remove(e);
    db.SaveChanges();
}

常見坑與解決

問題解決
ORA-12154: TNS 無法解析連接字串改用 Easy Connect 語法 (如上範例),或設定 TNS_ADMIN 指向含 tnsnames.ora 的資料夾。
序列/Identity 不支援Oracle 12c 前無 Identity,需手動指定序列或使用 DatabaseGeneratedOption.None 手動賦值。
DateTime 對應 DATE/TIMESTAMP用 [Column(TypeName = "DATE")] 或 Fluent API .HasColumnType("DATE")。
Code First Migration 不支援 OracleEF6 對 Oracle Migration 支援有限,建議 **Database First** (反向工程) 或手寫 SQL 腳本遷移。

參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved