2009-11-05 12 views
5

Sto migrando l'applicazione della mia azienda (che attualmente funziona su SQL Server e Oracle) su ASP NET MVC e Entity Framework per la persistenza.Entity Framework - Mappatura decimale (13,0) problema

Creare il mio modello di entità basato sul database di SQL Server e creare un SSDL per Oracle (per Oracle utilizzo DevArt dotConnect per provider Oracle) e ho alcuni problemi di dolore.

Le mie chiavi primarie di tabella sono su SQL Server sono di tipo decimale (13,0) e su Oracle sono numeri (13,0) ma Oracle esegue il mapping di tipo su Int64 e SQL Server su decimale, ma ho bisogno di tale SQL Server mappalo a Int64.

Faccio queste modifiche manualmente su Entity Data Model e per creare record E 'funziona bene, ma quando devo eliminare o aggiornare qualche record di ho ottenuto questi errore:

Il valore specificato non è un'istanza di tipo' Edm.Decimal' nome parametro: valore

at System.Data.Common.CommandTrees.DbConstantExpression..ctor(DbCommandTree commandTree, Object value, TypeUsage constantType)
at System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateValueExpression(DbCommandTree commandTree, EdmProperty property, PropagatorResult value)
at System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateEqualityExpression(DbModificationCommandTree commandTree, EdmProperty property, PropagatorResult value)
at System.Data.Mapping.Update.Internal.UpdateCompiler.BuildPredicate(DbModificationCommandTree commandTree, PropagatorResult referenceRow, PropagatorResult current, TableChangeProcessor processor, Boolean& rowMustBeTouched)
at System.Data.Mapping.Update.Internal.UpdateCompiler.BuildDeleteCommand(PropagatorResult oldRow, TableChangeProcessor processor)
at System.Data.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode, UpdateCompiler compiler)

qualcuno mi può aiutare?

Perché il mapping di Entity Framework è così fisso? Potrebbe essere più flessibile?

Ps .: L'errore che ho ottenuto, sospetto che sia a causa di un'associazione.

Ho un'entità denominata Province e un altro Paese denominato e penso che l'associazione tra queste Entità stia causando il problema durante l'aggiornamento e l'eliminazione.

saluti,

Douglas Aguiar

risposta

2

Questo può o non può aiutare, ma ho avuto lo stesso errore di fare la stessa cosa. Così ho modificato il modello concettuale e modificato il campo della chiave primaria da Int32 a Decimale. Finora, sembra aver risolto le cose. Ho ancora bisogno di testare di nuovo contro SQL Server e assicurarsi che questo non ha rotto.

0

Stavo ricevendo l'errore "Il valore specificato non è un'istanza di tipo 'Edm.Decimal' Nome parametro: valore" come hai postato nella tua domanda. Avevo cambiato i tipi di dati predefiniti da Decimale a Int32 in quanto questo riflette meglio la tipizzazione vera. Quando ho ricevuto questo errore per la prima volta, ho eseguito il rollback delle modifiche al tipo e ottenevo ancora un'eccezione, ma è stata leggermente modificata, ma ha portato a ulteriori scavi. In conclusione, nel mio scenario ci aspettavamo un trigger per popolare il PK durante la persistenza tramite la direttiva Before Insert. Il problema era che la classe di dominio creata da EF stava impostando il PK a 0, quindi il trigger non veniva mai attivato poiché il PK in entrata non era nullo. Ovviamente EF non ti consentirà di impostare Entity PK come annullabile. Forse questo aiuterà qualcun altro in futuro.

Problemi correlati