2012-04-03 8 views
5

Estoy construyendo un sitio MVC3 usando Entity Framework 4 y estoy teniendo un problema con los campos de longitud fija.Entity Framework está rellenando mis campos de texto aunque no son de longitud fija

Cuando miro mi código durante la depuración, muestra que MyEntity.Title="Hello name " con el título completado hasta la longitud máxima del campo.

Esto suele ser una cuestión de haber fijado la longitud del campo en el archivo EDMX o el uso de un tipo de datos char en la base de datos subyacente en lugar de un varchar. En este caso, ninguno de ellos es correcto, sin embargo, es posible que el problema campos fueron de longitud fija originalmente. He cambiado manualmente cada campo en el EDMX (y el modelo se ha regenerado) y los campos nunca fueron de longitud fija en la base de datos (que fue el punto de partida de la aplicación), así que creo que la necesidad de rellenar los campos está siendo almacenado en algún lugar de la configuración de Entity Framework y no se ha actualizado.

El problema se produce en los registros nuevos cuando se agregan a la base de datos: cuando se crea el objeto, el título será correcto, cuando se instancia de la base de datos se rellena.

¿Qué debo hacer para deshacerme del relleno, lo cual realmente está arruinando mis comparaciones de cuerdas a menos que corte todo?

+0

No puedo afirmar por su pregunta si está hablando de registros de bases de datos completamente nuevos o de los que se crearon cuando los campos en el modelo de entidades se establecieron en longitud fija. ¿Puedes aclarar? –

+0

He actualizado la pregunta: el problema surge con los nuevos registros. – glenatron

Respuesta

4

Resulta que en el archivo .EDMX los archivos acolchados seguían enumerados como nchar. Esto no era visible a través del Editor de Modelos, la única forma de cambiarlo era hacer clic derecho en el modelo en Visual Studio y seleccionar "abrir con ..." y luego usar un editor XML. Los campos ofensivos eran los siguientes:

<Property Name="MyProperty" Type="nchar" Nullable="false" MaxLength="50" /> 

Cambio de la Type a nvarchar y ejecutar la plantilla de nuevo parecía solucionar el problema arriba.

+0

Esta fue la solución a mi problema. Me he estado golpeando la cabeza por 2 horas buscando una solución. Gracias. – NewbieProgrammer

2

Los campos existentes no se actualizan en el modelo cuando se actualiza desde la base de datos. Debe eliminar las entidades del modelo o cambiar manualmente esos campos por los nuevos valores.

Compruebe los tipos de propiedad en el navegador de modelos y asegúrese de que sean correctos.

+0

Como dije en la pregunta, el Modelo se ha actualizado, la base de datos son todos los campos varchar. No hay nada que pueda encontrar en Visual Studio o en SQL Server para indicar que el campo debe completarse, así que supongo que hay algo oculto en el XML del archivo EDMX o en algún otro lugar similar. – glenatron

+1

Y estaba dejando en claro que solo ir a Actualizar modelo desde la base de datos no cambia los campos existentes en las tablas existentes en el modelo. Deben ser arreglados manualmente. Si ha arreglado manualmente cada campo en cada tabla en el modelo, entonces no dejó esto en claro. –

+0

Pensé que estaba claro cuando lo escribí, pero puedo ver que podría ser confuso, así que he editado la pregunta, gracias. Cambié manualmente las propiedades del campo para cada campo en el editor de modelos. – glenatron

0

Cambie su campo de título para que la propiedad de longitud fija sea igual a verdadera. Probablemente no tenga ninguno :)

Asegúrese primero de hacer el cambio en la dbase y luego actualice su edmx.

+0

No estoy seguro de entender esta respuesta.La propiedad se comporta como si fuera de longitud fija y quiero que se comporte como si fuera * no * de longitud fija. ¿Cómo va a hacer que la longitud fija resuelva esto? – glenatron

Cuestiones relacionadas