Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I have an object that has a char property:

public class Product {     public char Code     {         get;         set;     } } 

Entity Framework doesn't seem to be able to map chars (this field is missing from the database when I create the database schema from my model objects). Is there anyway I can map the char (e.g. to a string) using the fluent API? I don't want to change the model objects as they are part of a legacy shared library.

like image 752
dommer Avatar asked Jul 20 '11 10:07

dommer


People also ask

What is mapping in Entity Framework?

It is a tool to access the database. More accurately, it's classified as an Object/Relational Mapper (ORM) which means it maps data in a relational database into objects of our applications. Entity Framework. It is a tool to access the database.

What is fluent API in Entity Framework?

Fluent API is an advanced way of specifying model configuration that covers everything that data annotations can do in addition to some more advanced configuration not possible with data annotations.

Which class acts as fluent API in Entity Framework?

In Entity Framework Core, the ModelBuilder class acts as a Fluent API.


2 Answers

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.

like image 150
Ladislav Mrnka Avatar answered Sep 22 '22 19:09

Ladislav Mrnka


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; } 
like image 42
jk7 Avatar answered Sep 24 '22 19:09

jk7