2009-04-08 5 views
2

Mon db ressemble somthing comme ceci:nhibernate: Comment mapper un composant qui fait référence à un enité?

MyEntity  State 
-----  ----- 
id   id 
street  name 
stateId  ... 
zip 
status 
... 

Mon modèle ressemble à ceci:

class MyEntity 
{ 
    int id { get; set; } 
    Address location { get; set; } 
    string status { get; set; } 
    // ... 
} 

class Address 
{ 
    string street { get; set; } 
    string zip { get; set; } 
    State state { get; set; } 
    // ... 
} 

class State 
{ 
    int id { get; set; } 
    string name { get; set; } 
    // ... 
} 

Je suis un peu mal à l'aise avec mon élément d'adresse référence à une entité. Ça sent comme un mauvais modèle. Est-ce? Si non, comment pourrais-je cartographier ceci (de préférence avec un nhibernate fluide)?

Répondre

1

Je ne suis pas sûr non plus de ce que faire de référencer une entité d'un composant. Je l'ai fait moi-même (avec une entité d'État, pas moins).

En ce qui concerne la cartographie, il est assez simple:

public class MyEntityMap : ClassMap<MyEntity> 
{ 
    public MyEntityMap() 
    { 
     Id(x => x.id); 
     Component<Address>(x => x.location, c => 
     { 
      c.Map(x => x.street); 
      c.Map(x => x.zip); 
      c.References<State>(x => x.state); 
     }); 
     Map(x => x.status); 
    } 
} 

Parfois, ce que je fais est d'ajouter une classe statique pour le composant pour faire le ClassMap un peu plus agréable:

public static class NameMap 
{ 
    public static Action<ComponentPart<Name>> AsComponent(string prefix) 
    { 
     return c => 
     { 
      c.Map(x => x.Title, ColumnName(prefix, "Title")); 
      // and so on 
     }; 
    } 
} 

Dans ce case ColumnName est une fonction simple qui attache le préfixe au nom de la colonne (ce qui est très pratique dans les superbes DB existants dans lesquels je peux jouer).

Ensuite, dans le ClassMap vous venez:

Component<Name>(x => x.Name, c => NameMap.AsComponent("prefix")); 
+0

oo, j'aime la syntaxe des composants plus fluide! Je ne savais pas si je pouvais faire référence à partir d'un composant. Merci de m'avoir vérifié. Référencement de votre entité d'état élaboré alors? Ou avez-vous fini par le changer? –

+0

Oui, cela fonctionne comme-est. La façon dont je le vois, le modèle approprié est pour l'adresse d'être une entité distincte dans laquelle cas ayant une relation entre l'adresse et l'État est bien. Cependant, avec les bases de données héritées, je n'ai pas la possibilité de restructurer, donc je dois me concentrer sur ce qui peut être fait et non sur ce qui est «juste». –

Questions connexes