2009-11-05 12 views
5

Estoy migrando la aplicación de mi empresa (que actualmente se ejecuta en SQL Server y Oracle) a ASP NET MVC y Entity Framework para la persistencia.Entity Framework - Corrección del problema decimal (13,0)

A crear mi modelo de entidad basado en la base de datos de SQL Server e, por separado, creo un SSDL para Oracle (para Oracle uso DevArt dotConnect para Oracle Provider) y me dan algunos problemas.

Las claves principales de mi tabla en SQL Server son de tipo decimal (13,0) y en Oracle son el número (13,0) pero el mapa de Oracle es de Int64 y SQL Server a decimal, pero necesito ese SQL Server asignarlo a Int64.

Hago estas modificaciones manualmente en modelo de entidad de datos y para crear registros Es funciona bien, pero cuando tengo que borrar o actualizar algún registro Tengo estos errores:

El valor especificado no es una instancia del tipo ' nombre del parámetro Edm.Decimal': valor

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)

Alguien me puede ayudar?

¿Por qué el mapeo de Entity Framework es tan fijo? Podría ser más flexible?

Ps .: El error que tengo, sospecho que es debido a una asociación.

Tengo una Entidad llamada Provincia y otra denominada País y creo que la asociación entre estas Entidades está causando el problema en la actualización y eliminación.

Saludos,

Douglas Aguiar

Respuesta

2

Esto puede o no puede ayudarle, pero que tenía el mismo error de hacer esto mismo. Así que edité el modelo conceptual y cambié el campo de clave principal de Int32 a Decimal. Hasta ahora, parece haber arreglado las cosas. Todavía tengo que volver a probar contra el Servidor SQL y asegurarme de que esto no lo rompa.

0

Recibo el error "El valor especificado no es una instancia del tipo 'Edm.Decimal' Nombre del parámetro: valor" como ha publicado en su pregunta. Cambié los tipos de datos predeterminados de Decimal a Int32, ya que esto refleja mejor el verdadero tipeo. La primera vez que pulsé este error retrocedí los cambios de tipo y recibí una excepción, pero cambió ligeramente pero me llevó a profundizar más. En pocas palabras, en mi caso, esperábamos que un activador llenara el PK durante la persistencia a través de la directiva Before Insert. El problema era que la clase de dominio construida por EF estaba configurando el PK en 0, por lo que el desencadenante nunca se activaba ya que el PK entrante no era nulo. Por supuesto, EF no le permitirá configurar la Entidad PK para que sea nulable. Tal vez esto ayude a alguien más en el futuro.