web-dev-qa-db-fra.com

Comment mapper une propriété char à l'aide de l'API fluide "Code uniquement" d'Entity Framework 4.1?

J'ai un objet qui a une propriété char:

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

Entity Framework ne semble pas pouvoir mapper les caractères (ce champ est manquant dans la base de données lorsque je crée le schéma de base de données à partir de mes objets de modèle). Y at-il un moyen de mapper le caractère (par exemple, sur une chaîne) en utilisant l’API couramment? Je ne souhaite pas modifier les objets du modèle car ils font partie d'une ancienne bibliothèque partagée. 

43
dommer

Char n'est pas un type primitif valide pour entity framework = l'entité framework ne le mappe pas. Si vous cochez Référence CSDL , vous verrez une liste des types valides (char ne figure pas parmi eux).

La base de données char(1) est traduite en string ( de la traduction SQL à CSDL ). Char est décrit comme une chaîne non unicode de longueur fixe 1 .

La seconde option moche est la deuxième propriété mappée à l'aide de chaîne et votre propriété char non mappée utilisera simplement string[0] à partir de cette propriété. C’est un autre exemple de la manière dont certains types ou convertisseurs de types simples manquent cruellement dans EF.

68
Ladislav Mrnka

Dans l'API Fluent, vous pouvez spécifier le type de données de colonne de la base de données à l'aide de la méthode HasColumnType, comme suit:

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

Selon la réponse d'André Artus ici , HasColumnType est disponible dans EF4.1.

Pour ceux qui utilisent des annotations de données, ColumnAttribute peut accomplir la même chose.

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

Il existe d'autres moyens de résoudre ce problème uniquement à des fins de test. Rendre le champ non null à null pour le moment en mode de conception. Parfois, il est restreint SQL Management Studio. (Modifier le paramètre Outils -> Option -> Designer -> Concepteur de base de données de tables -> Décocher "Empêcher l'enregistrement des modifications nécessitant la création d'une table"

0
Manoj Patil