¿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.

Author: dommer, 2011-07-20

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.

 67
Author: Ladislav Mrnka,
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; }
 26
Author: jk7,
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