2010-07-23 5 views
0

Je travaille sur une application de planification d'événements pour les contacts d'un annuaire téléphonique. Éviter tous les trucs public virtual et protected, ma classe Contact ressemble:Tout type de mappage avec différents types d'ID

class Contact { 
    //... 
    Int32 Id { get; private set; } //primary key; 
    String Name { get; private set; } 
    //... 
} 

Un client m'a demandé de gérer à la fois son propre répertoire et celui de ma demande. J'ai donc pensé à extraire une interface IContact de Contact, et d'ajouter une autre classe InternalContact (ce nom est nul, je sais), en implémentant la même interface. Le problème est que la base de données du client utilise une chaîne affectée comme clé primaire, donc le type d'ID de Contact et le type d'ID de InternalContact seront différents. Est-il possible de mapper la propriété Invitation.Contact en utilisant un mappage de type <any>, même si les types d'ID sont différents?

Merci à l'avance, Giulio

Répondre

0

Je ne sais pas si c'est ce que vous demandez, mais vous pourriez faire quelque chose comme ça pour créer les classes:

interface IContact<T> 
{ 
    T Id { get; } 
} 

public class Contact : IContact<int> 
{ 
    public int Id { get; private set; } 
} 

public class InternalContact : IContact<string> 
{ 
    public string Id { get; private set; } 
} 
+0

Générique? Uhm ... ça semble intéressant. ;-) Mais est-ce possible? Que dois-je écrire dans le fichier de mapping? Un lien vers n'importe quel exemple sur cette technique? Merci. – petrux

+0

Oui, c'est possible. Voici un lien vers une introduction: http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx – spinon

+0

Il semble que vous n'ayez pas reçu le 'core' de ma question: Je sais ce que sont les génériques, je ne sais pas comment implémenter un mapping polymorphe avec NHibernate où les Id des entités sont de types différents. Ou peut-être qu'il me manque quelque chose? – petrux

Questions connexes