Ich habe die folgende einfache Einheit:Oracle ODP.Net und EF CodeFirst - edm.decimal Fehler
public class Something{
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int ID { get; set; }
public string NAME { get; set; }
public int STATUS { get; set; }
}
Wie Sie sehen können, ich will nicht die ID aus der Datenbank generiert wird, aber ich werde manuell eingeben. Dies ist meine DbContext-Klasse:
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);
}
}
Hier ist nichts besonderes. Aber dieser Code nicht:
using (MyCEContext ctx = new MyCEContext()) {
Something t = new Something();
t.ID= 1;
t.NAME = "TEST";
t.STATUS = 100;
ctx.Somethings.Add(t);
ctx.SaveChanges();
}
Dies ist der Fehler:
Der angegebene Wert ist keine Instanz des Typs 'Edm.Decimal'
Im Allgemeinen Allways EF versuchen, eine senden Wert zu einem int Primärschlüsselfeld, bekomme ich den edm.decimal Fehler.
Irgendwelche Hilfe?
Haben Sie EF die Datenbank erstellen haben Oder verwenden Sie CodeFirst mit einer bereits vorhandenen Datenbank? – Pawel
Ich verwende CodeFirst mit einer vorhandenen Datenbank, da Oracle die Erstellung von Datenbanken noch nicht unterstützt. Aber der Tisch hat nichts komisches. Das ID-Feld ist der Primärschlüssel mit NUMBER (9) als Typ. – fcaldera
Ich kenne Oracle nicht, aber diese Tabelle http://docs.oracle.com/cd/E11882_01/win.112/e18754/featLINQ.htm zeigt, dass der NUMBER-Typ dem Edm.Decimal-Typ zugeordnet werden kann (ich nehme Number (9) ist etwas anderes als Nummer (9,0) und fällt daher auf "andere Fälle"). Sie können dies bestätigen, indem Sie entweder edmx (EdmxWriter.WriteEdmx) und den EDM-Typ der CSpace-Schlüsseleigenschaft der Something-Entität prüfen oder den Typ in Ihrer Klasse in Decimal ändern, um zu sehen, ob es funktioniert. – Pawel