¿Cómo mapeo una propiedad char usando la API fluent de Entity Framework 4.1 "solo código"?
Tengo un objeto que tiene una propiedad char:
public class Product
{
public char Code
{
get;
set;
}
}
Entity Framework no parece ser capaz de asignar caracteres (este campo falta en la base de datos cuando creo el esquema de la base de datos a partir de los objetos de mi modelo). ¿Puedo mapear el char (por ejemplo, a una cadena) usando la API fluent? No quiero cambiar los objetos del modelo, ya que forman parte de una biblioteca compartida heredada.
2 answers
Char
no es un tipo primitivo válido para entity framework = entity framework no lo mapea. Si marca Referencia CSDL verá una lista de tipos válidos (char
no está entre ellos).
Database char(1)
se traduce como string
(Traducción de SQL a CSDL). Char
se describe como cadena no unicode con longitud fija 1.
La única opción fea es la segunda propiedad mapeada usando string y su char
propiedad no mapeada solo usará string[0]
desde esa propiedad. Eso es solo otro ejemplo de cómo algunos tipos simples de mapeo o convertidores están malditos desaparecidos en EF.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:55
En Fluent API puede especificar el tipo de datos de la columna de la base de datos usando el método HasColumnType de la siguiente manera:
modelBuilder.Entity<Product>()
.Property(p => p.Code)
.HasColumnType("char");
De acuerdo con la respuesta de Andre Artus aquí, HasColumnType está disponible en EF4.1.
Para aquellos que usan Anotaciones de datos, el ColumnAttribute puede lograr lo mismo.
[Column(TypeName="char")]
public string Code { get; set; }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:07