Asp.net-Mvc-3

如何配置 DbContext 以使用 Oracle ODP.Net 和 EF CodeFirst?

  • October 11, 2018

我正在嘗試通過 ODP.net 在 Oracle 下使用 EF CodeFirst。這是我的 DbContext 類:

   public class MyCEContext : DbContext {

   public DbSet<Person> Persons { get; set; }

   protected override void OnModelCreating(DbModelBuilder modelBuilder) {
       modelBuilder.Entity<Person>().ToTable("PERSONS","myce");

   }

   public MyCEContext() : 
       base(new OracleConnection(
           "Data Source=cebd; User ID=myce; Password=****;"), true) {}

}

問題是當我嘗試做這樣的事情時:

MyCEContext context = new MyCEContext();
Person p = context.Persons.Find(1);

我得到這個內部錯誤:

{"ORA-00942: table or view does not exist"}

並且該表存在。

我究竟做錯了什麼?

正如尼克在他的回答中所寫,問題與生成的查詢的引號和大小寫有關,但與表的名稱無關,而與模式的名稱有關:

SELECT * 
FROM "myce"."PERSONS" "Extent1"

所以解決方法很簡單,只需要將使用者id和模式名大寫即可:

modelBuilder.Entity<Person>().ToTable("PERSONS","MYCE");

通常,所有內容都必須大寫:表、模式和欄位的名稱。但最好使用 Column 屬性而不是大寫屬性名稱來註釋每個映射的屬性:

   [Column("FIRST_NAME")]
   public string FirstName { get; set; }

因此,名稱將更容易在數據庫和類中閱讀。

引用自:https://stackoverflow.com/questions/9729750