2011-01-28 28 views
7

Mi aplicación es puramente de solo lectura, por lo que no quiero generar toda la actualización & borrar código, y no quiero incluir todos los campos de todas las tablas. Algunos de estos campos no admiten valores NULL, por lo que recibo errores de EF porque no existe un valor predeterminado para guardar.¿Cómo crear una entidad de solo lectura en Entity Framework?

En mi anterior ORM (Wilson), solo podía marcar una entidad como de solo lectura en el XML. He visto algunas publicaciones que muestran soluciones intrincadas a esto. ¿Me estoy perdiendo de algo? ¿Por qué no es esto directo?

veo que el asistente de servicios de RIA tiene una casilla de verificación para este para cada entidad ...

Gracias por las explicaciones.

+0

Debe ser más preciso acerca de los errores que ve y en qué circunstancias los ve. No hay una función de "solo lectura", pero tu aplicación aún debería funcionar. –

+1

Después de eliminar algunas columnas (que no son nulas en la base de datos) de la entidad en el diseñador, aparece el error: "Columna xyz en la tabla ABC debe estar correlacionada: no tiene valor predeterminado y no puede contener nulos". Lo cual tiene sentido, pero quiero ignorar esa columna por completo y no tener el código de actualización de compilación de EF en absoluto. – Graeme

Respuesta

1

El problema es que tiene un campo que no admite valores NULL en su SSDL que no está en su CSDL.

Puede eliminar manualmente la columna de SSDL y la EF estará contenta. Pero el diseñador volverá a agregar la columna cuando actualice el modelo. Entonces puede eliminarlo nuevamente o actualizar su modelo desde una variante del DB que no tiene esa columna.

+0

Eso es lo que sospechaba. ¿Pero por qué? ¿Cuál fue la dificultad de permitir un atributo de solo lectura o quitar la columna del SSDL si lo eliminé del EDMX? – Graeme

+1

No puede tener un atributo de solo lectura, no aceptan nulos en un tipo de lectura y escritura, y el EF no tiene una función de "tipo de solo lectura", AFAIK. Eliminar una columna de SSDL no es "difícil", pero el diseñador elige no hacerlo porque en el mundo del diseñador de la GUI, el SSDL * siempre * se genera (y, con frecuencia, se vuelve a generar), no se mantiene manualmente. –

+0

OK, puedo aceptar eliminar la columna de SSDL (y seguir quitándola), pero ¿qué pasa con todo el código crud generado? Es simplemente molesto saber que está allí, incluso cuando no se requiere. Me pregunto cuál es el problema con EF que no tiene un atributo de tipo de solo lectura ... – Graeme

Cuestiones relacionadas