Asp.net-Mvc-3
如何配置 DbContext 以使用 Oracle ODP.Net 和 EF CodeFirst?
我正在嘗試通過 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; }因此,名稱將更容易在數據庫和類中閱讀。