How do I map a char property using the Entity Framework 4.1 "code only" fluent API?

Char is not valid primitive type for entity framework = entity framework doesn't map it. If you check CSDL reference you will see list of valid types (char is not among them).

Database char(1) is translated as string (SQL to CSDL translation). Char is described as non-unicode string with fixed length 1.

The only ugly option is second mapped property using string and your char non-mapped property will just use string[0] from that property. That is just another example how some simple type mapping or converters are damn missing in EF.


In Fluent API you can specify the database column data type using the HasColumnType method like this:

modelBuilder.Entity<Product>()   
.Property(p => p.Code)   
.HasColumnType("char");

According to Andre Artus' answer here, HasColumnType is available in EF4.1.

For those using Data Annotations, the ColumnAttribute can accomplish the same thing.

[Column(TypeName="char")]
public string Code { get; set; }