.net - net - entity framework que es
Entity Framework 4 mapeando error de fragmento al agregar nueva entidad escalar (8)
Tengo un diseño de primer modelo de Entity Framework 4. Creo un primer borrador de mi modelo en el diseñador y todo estaba bien. Recopilé, generé la base de datos, etc.
Más tarde traté de agregar un escalar de cadena (Nullable = true) a una de mis entidades existentes y sigo obteniendo este tipo de error cuando compilo:
Error 3004: Problema en el mapeo de fragmentos comenzando en la línea 569: No se especificó el mapeo para las propiedades MyEntity.MyValue en Set MyEntities. Una entidad con clave (PK) no realizará un viaje de ida y vuelta cuando: la entidad sea del tipo [MyEntities.MyEntity]
Sigo teniendo que abrir manualmente el archivo EDMX y corregir el XML cada vez que agrego escalares.
Ideas sobre lo que está pasando?
Acabo de eliminar las tablas ofensivas del modelo y luego las volví a agregar y todo estuvo bien.
Desde entonces, descubrí que después de agregar / cambiar / eliminar propiedades en mis entidades, debo "Generar una base de datos desde el modelo" antes de compilar, de lo contrario obtengo 3004 errores de mapeo.
Después de revisar el archivo xml (edmx), mover el modelo a otro proyecto y darse cuenta de que todo está bien, decidí cerrar y abrir el Visual Studio y compilarlo, luego el error desaparece.
Otra alternativa para hacerlo sin eliminar la tabla del diagrama y volver a agregarla, es usar la opción de Mapeo de tabla.
- Ir al navegador modelo
- Haga clic derecho en el nombre de la tabla.
- Elija mapeo tablle
- Visual Studio mostrará una ventana con columnas de tabla de coincidencia / falta de propiedades EF.
- Seleccione / coincida la columna apropiada con la propiedad perdida
Para aquellos de ustedes que están creando un modelo a partir de una base de datos, tuve este problema después de realizar cambios en mi base de datos. Sucedió cuando cambié un nombre de campo en el DB por una razón u otra (creo que también sucede si cambias un tipo de datos).
La solución, para mí, era hacer clic derecho en el espacio de trabajo y elegir "Actualizar modelo desde la base de datos". Esto debería agregar las propiedades de la BD a su modelo, sin embargo, NO elimina sus propiedades anteriores y éstas le darán el error 3004.
Haga clic derecho en el espacio de trabajo y seleccione "Validar". Esto debería darle una lista de errores que muestra las propiedades ofensivas. Luego puede hacer clic con el botón derecho en cada propiedad ofensiva y eliminarla manualmente de su modelo.
Esto solucionó el problema para mí. Espero que ayude a alguien más.
Recibí el mismo problema después de cambiar el nombre de una propiedad en una de mis entidades.
Descubrí que la asignación entre la propiedad de mi entidad y la columna correspondiente en la tabla no estaba configurada.
Puede configurar esto usando el editor haciendo clic derecho sobre la entidad en el modelo y eligiendo "Mapeo de tabla". Asegúrese de que las propiedades estén asignadas a una columna en la base de datos.
Editar: también necesitaba volver a ejecutar mi archivo tt para generar las nuevas clases. (¿Podría haber sido desde que lo tengo en otro proyecto?)
Si desea modificar su base de datos sin regenerar todo el modelo o recreando su base de datos desde el modelo, creo que es más fácil y seguro modificar las propiedades del diagrama de EDMX a través de Visual Studio y luego ajustar manualmente las asignaciones que el estudio visual no da el acceso a los.
El error le dará un número de línea:
Problema al mapear fragmentos comenzando en la línea 569
Simplemente abra el archivo edmx en un editor de texto, vaya a esa línea y debería ser bastante obvio lo que debe solucionarse. Hay una sección que se verá así:
<EntityTypeMapping TypeName="YourModel.YourType">
<MappingFragment StoreEntitySet="YourType">
<ScalarProperty Name="PropertyName1" ColumnName="DatabaseColumn1" />
<ScalarProperty Name="PropertyName2" ColumnName="DatabaseColumn2" />
...
</MappingFragment>
</EntityTypeMapping>
Solo asegúrese de que haya un nodo para cada propiedad / nombre de columna que necesite, y que todas las propiedades también estén enumeradas en la <EntityType Name="YourTable">
en la parte superior del documento de edmx
Si todas sus consultas están escritas en procedimientos almacenados y usted simplemente está tratando de completar el modelo, entonces podría cambiar a un tipo complejo que funcionó para mí.
Cómo crear un tipo complejo:
- Cambie manualmente el nombre de la clase generada por la entidad con la que tiene problemas con un nombre que aún no esté en uso en su archivo edmx.
- Seleccione la ventana del Navegador de modelos y haga clic con el botón derecho / agregue un nuevo tipo complejo.
- Copie / Pegue las propiedades del modelo original en el tipo complejo.
Asigna tus procedimientos almacenados al tipo complejo.
Espero que esto ayude a alguien.