**不需安裝 Oracle Client**,純 Managed 程式碼,透過 NuGet 即可完成所有設定。
Install-Package Oracle.ManagedDataAccess.EntityFramework
會自動安裝相依套件:Oracle.ManagedDataAccess、EntityFramework (若專案尚未有)。
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; }
}
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 不支援 Oracle | EF6 對 Oracle Migration 支援有限,建議 **Database First** (反向工程) 或手寫 SQL 腳本遷移。 |