我有以下簡單的實體:甲骨文ODP.Net和EF CodeFirst - edm.decimal錯誤
public class Something{
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int ID { get; set; }
public string NAME { get; set; }
public int STATUS { get; set; }
}
正如你所看到的,我不想從數據庫生成的ID,但我要去手動輸入。這是我的DbContext類:
public class MyCEContext : DbContext {
...
public DbSet<Something> Somethings { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
string dbsch = "myce";
modelBuilder.Entity<Something>().ToTable("SOMETHING", dbsch);
}
}
這裏沒有什麼特別的。但是這個代碼失敗:
using (MyCEContext ctx = new MyCEContext()) {
Something t = new Something();
t.ID= 1;
t.NAME = "TEST";
t.STATUS = 100;
ctx.Somethings.Add(t);
ctx.SaveChanges();
}
這是錯誤:
指定的值類型不是「Edm.Decimal」
一般情況下,永諾EF嘗試發送一個實例值的int主鍵字段,我得到edm.decimal錯誤。
任何幫助?
你有EF創建數據庫或者您正在使用CodeFirst與已經存在的數據庫? – Pawel 2012-04-12 03:45:36
我對現有數據庫使用CodeFirst,但sice Oracle尚不支持數據庫創建。但桌子沒有什麼奇怪的。 ID字段是類型爲NUMBER(9)的主鍵。 – fcaldera 2012-04-12 17:05:11
我不知道Oracle但是這張表http://docs.oracle.com/cd/E11882_01/win.112/e18754/featLINQ.htm顯示NUMBER類型可以映射到Edm.Decimal類型(我假設Number( 9)與數字(9,0)不同,因此屬於「其他情況」)。您可以通過轉儲edmx(EdmxWriter.WriteEdmx)並檢查Something實體的CSpace key屬性的EDM類型或將類中的類型更改爲Decimal來確認此操作是否可行。 – Pawel 2012-04-12 20:54:06