0

j'ai un utilisateur de classe, qui se trouve dans le module central du système:Courant référence nHibernate par Id (et non par l'objet)

public class User 
{ 
    public virtual int Id {get; set;} 
    public virtual string Name {get; set; } 
} 

I ont également une société de classe, qui se trouve dans un autre module du système et ne dispose pas d'une référence au module de base:

public class Company 
{ 
    public virtual int Id {get; set;} 
    public virtual string Name {get; set; } 
    public virtual int OwnerUserId {get; set;} 
} 

Comment puis-je créer une cartographie de Company.OwnerUserId être une clé étrangère à User.Id dans la base de données? Encore une fois, notez: ce mapping ne peut pas avoir de référence à la classe "User".

+0

Pourquoi ne pas utiliser 'la carte (x => x.OwnerUserId)'? – Najera

+0

Cela ne va pas générer une clé étrangère, n'est-ce pas? – piotrwest

+0

Utilisez-vous nhibernate pour la migration db? – Najera

Répondre

-1

Ceci est une solution de contournement, je ne sais pas comment la mise à jour de schéma va générer la clé étrangère sans référence de mappage pour obtenir les métadonnées.

Vous pouvez créer une nouvelle entité mis en correspondance avec la même table:

public class LocalUser 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
} 

public class Company 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual LocalUser OwnerUserId { get; set; } 
} 

public class LocalUserMap : ClassMap<LocalUser> 
{ 
    public LocalUserMap() 
    { 
     Table("[User]"); 
     Id(x => x.Id).GeneratedBy.Identity(); 
     Map(x => x.Name); 
    } 
} 
+0

Ajout d'une nouvelle entité mappée à la même table est une solution de contournement parfaite pour moi. Y at-il une chance d'avoir la propriété "OwnerUserId" de type int, au lieu de chaîne? Juste pour signaler dans le modèle que c'est la limite et que je pourrais rendre la classe LocalUser obsolète dans ce module (parce qu'elle devrait être utilisée n'importe où malgré le mapping). – piotrwest

+0

Je ne comprends pas, créer une propriété supplémentaire dans quelle classe? – Najera

+0

Pas de propriété supplémentaire. Je souhaite avoir l'entité Société sous: public class Société { (...) public virtual int OwnerUserId {get; ensemble; } } et cela ne me dérange pas d'avoir LocalUser (dans le projet), mais pas comme une propriété dans la société. – piotrwest