Al crear clases POCO que contienen colecciones de tipos primitivos y persisten en EF Code First, el mejor consejo que he encontrado hasta ahora es crear una nueva clase que tenga una ID más la tipo primitivo:Entity Framework Code First y colecciones de tipos primitivos
Entity Framework and Models with Simple Arrays
Si ahora tengo varias clases que requieren propiedades de tipo ObservableCollection<string>
y reemplazarlos con ObservableCollection<EntityString>
(donde EntityString
es un tipo personalizado con un ID y una propiedad de cadena), que terminan con una tabla EntityString
que tiene varias columnas de clave externa, una para cada propiedad del tipo ObservableCollection<EntityString>
en todos los tipos de concreto con tales propiedades.
Esto conduce a una hinchazón de columnas de clave foránea en su mayoría nulas en la tabla EntityString
.
Un enfoque sería crear una subclase de EntityString
y utilizar el modelo Table per Type para esas subclases. Sin embargo, eso requiere hacer cambios incómodos en el modelo de objetos simplemente para acomodar Entity Framework.
Preguntas:
- es escribir la encapsulación la mejor manera de manejar
Collection<PrimitiveType>
? - En caso afirmativo, ¿cuáles son las ventajas y desventajas de permitir columnas múltiples (muchas) claves externas frente a la creación de tablas personalizadas por tipo (a cambio de un modelo incómodo)?
Esta solución supone que un ';' (o cualquier otro carácter mágico seleccionado) no es una entrada válida para la cadena base, ¿correcto? –
¿Es posible expresar la configuración fluida 'WithOptional' con atributos de clase? Entiendo que son alternativas entre sí, pero hasta el momento no he encontrado documentación completa sobre el tema. –
Si la asignación predeterminada no hace que la relación sea opcional, no puede cambiarla con la anotación de datos. La anotación de datos se debe colocar en alguna propiedad, pero en este caso no hay ninguna propiedad en la entidad dependiente para usar. –