2010-04-22 5 views
1

Depuis que je passe à VS2010, plusieurs fois par jour, je reçois une erreur de compilation dans mon fichier dbml:erreur de cartographie étrange dans LINQ to SQL fichier dbml dans VS2010

DBML1005: Mapping between DbType 'bigint' and Type 
'MyNamespace.SecurityToken' in Column 'SecurityToken' of Type 
'Employee' is not supported 

Lorsque je redémarre VS2010 l'erreur disparait . Je n'ai aucun problème à exécuter mon application en utilisant ce fichier dbml (en particulier, il n'y a aucun problème à obtenir des valeurs correctes dans la propriété SecurityToken de Employee objets).

La propriété SecurityToken est d'un type enum défini comme suit:

[Flags] 
public enum SecurityToken : long 
{ 
    None = 1, 
    Admin = 2, 
    ...... 
} 

La colonne SecurityToken dans la base de données est de type bigint.

Ai-je raté quelque chose? Il est particulièrement étrange que l'erreur ne se produise parfois que lorsque j'écris du code qui n'est pas du tout lié au modèle LINQ.

Répondre

6

Il semble que ce soit un bug LINQ lors de la résolution des énumérations. La solution de contournement consiste à ajouter le préfixe global::.

Une cartographie nécessaire dans votre fichier DBML peut ressembler à:

<Column Name="SecurityToken" Type="global::MyNamespace.SecurityToken" 
     DbType="BigInt NOT NULL" CanBeNull="false" /> 

de cause, vous pourriez faire la même chose en utilisant concepteur.

+0

Vous pouvez également déclarer l'énumération dans le même espace de noms que le DataContext. IIRC, ce 'bug' était également présent dans VS2008. – leppie

+0

@leppie: il est intéressant que parfois le mappage fonctionne correctement sans utiliser le mot-clé global mais parfois ... – Alex

+0

Je vais essayer et signaler si le problème ne se produit plus. Merci. –