2009-09-03 6 views
0

Le problème que j'ai est lors de l'utilisation de Linq2Sql avec l'héritage après la déclaration d'une nouvelle instance de la classe héritée la propriété discriminator est toujours définie à sa valeur initiale, pas la valeur correcte pour le sous -type. Il obtient la valeur correcte après l'avoir attaché à un contexte et en appelant SubmitChanges(). Il y a des moments où je veux déclarer un nouvel objet du type hérité et appeler des méthodes sur la classe de base avec la classe de base connaissant le type hérité avec lequel il travaille et le choix le plus logique serait d'utiliser la propriété discriminator.Linq2Sql: Force la propriété de discriminateur à définir

Existe-t-il un moyen de forcer le paramétrage de la propriété discriminante? Je ne veux pas aller à toutes mes sous-classes et implémenter la méthode partielle OnCreated() pour quelque chose que le contexte sait déjà faire.

Répondre

0

J'ai trouvé une solution de contournement légèrement meilleure que de mettre du code dans la méthode OnCreated() de chaque classe héritière et j'ai pensé que je la laisserais au cas où quelqu'un trébucherait ici.

Dans le OnCreated() de la classe de base I ajouté du code qui ressemblait à ceci:

partial void OnCreated() 
{ 
    if (this is BaseClass1) 
    { 
     this.[DiscriminatorProperty] = DiscriminatorValueForBaseClass1; 
    } 
    else if(this is BaseClass2) 
    { 
     this.[DiscriminatorProperty] = DiscriminatorValueForBaseClass2; 
    } 
} 

Il dédouble encore la fonctionnalité que le contexte sait déjà comment faire, mais au moins je ne suis pas l'implémentation de OnCreated() dans chaque classe de base. Je n'aime pas non plus le fait que si une nouvelle classe est ajoutée ou qu'une valeur de discriminateur change, vous devez la mettre à jour dans DBML et dans OnCreated(). Pour cette raison, j'aimerais toujours que le contexte attribue la valeur, en fait il devrait le faire lorsque la classe héritée est créée.

Questions connexes