2009-11-05 4 views
5

Je migre l'application de ma société (qui fonctionne actuellement sur SQL Server et Oracle) vers ASP NET MVC et Entity Framework pour la persistance. Créer un modèle d'entité basé sur la base de données SQL Server e séparément Je crée un SSDL pour Oracle (pour Oracle j'utilise DevArt dotConnect pour Oracle Provider) et j'ai des problèmes de douleurs. Mes clés primaires de table sont sur SQL Server sont de type décimal (13,0) et sur Oracle sont numéro (13,0) mais mappage Oracle est de type à Int64 et SQL Server à décimal, mais j'ai besoin de SQL Server le mapper à Int64.Entity Framework - Problème de mappage décimal (13,0)

Je fais ces modifications manuellement sur Entity Data Model et pour créer des enregistrements, il est fonctionne très bien, mais quand je dois supprimer ou mettre à jour un certain dossier, je suis ces erreurs:

La valeur spécifiée n'est pas une instance de type ' Edm.Decimal » nom du paramètre: valeur

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)

Quelqu'un peut me aider? Pourquoi le mappage d'Entity Framework est-il corrigé de cette manière? Cela pourrait être plus flexible? Ps: L'erreur que j'ai eue, je suppose que c'est à cause d'une association.

J'ai une entité nommée Province et une autre nommée Country et je pense que l'association entre ces Entités est à l'origine du problème lors de la mise à jour et de la suppression.

Cordialement,

Douglas Aguiar

Répondre

2

Cela peut ou ne peut pas vous aider, mais j'ai eu la même erreur de faire la même chose. J'ai donc édité le modèle conceptuel et changé le champ clé primaire de Int32 en Decimal. Jusqu'à présent, semble avoir fixé les choses. J'ai encore besoin de tester à nouveau contre Sql Server et assurez-vous que cela ne l'a pas cassé.

0

Je recevais l'erreur "La valeur spécifiée n'est pas une instance de type 'Edm.Decimal' Nom du paramètre: valeur" comme vous l'avez posté dans votre question. J'avais changé les types de données par défaut de Decimal à Int32 car cela reflète mieux le vrai typage. Quand j'ai frappé cette erreur pour la première fois, j'ai annulé les changements de type et recevais toujours une exception, mais cela a légèrement changé mais a conduit à creuser plus loin. Bottom line, dans mon scénario, nous attendions un déclencheur pour remplir le PK pendant la persistance via la directive Before Insert. Le problème était que la classe de domaine construite par EF mettait le PK à 0 de sorte que le déclencheur ne tirait jamais car le PK entrant n'était pas nul. Bien sûr, EF ne vous laissera pas définir l'entité PK comme étant nulle. Peut-être que cela aidera quelqu'un d'autre à l'avenir.