2011-08-08 5 views
0

Je viens de commencer à apprendre Nhibernate. J'ai un problème avec la cartographie (relation exacte). J'ai deux tables:Problème avec le fichier de mappage (relation)

Tableau 1 (DIC_TOWN)

TOWN_ID 
    1 
    2 
    3 

Tableau 2 (DIC_TOWN_STRINGS)

TOWN_ID LANG_ID  TOWN_NAME 
    1  1   CityName 
    1  2   CityName 
    2  1   CityName 
    2  2   CityName 

Ma classe:

public class TownS 
    { 
     public virtual int TownId { get; set; } 

     public virtual Languages LangId { get; set; } 

     public virtual string TownName { get; set; } 

    } 

EDIT:

Mon fichier de mapping:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="EArchive.Data" namespace="EArchive.Data.Class"> 
    <class name="TownS" table="DIC_TOWN_STRINGS" lazy="false"> 
    <composite-id> 
     <key-property name="TownId" column="TOWN_ID" /> 
     <key-property name="LangId" column="LANG_ID" /> 
    </composite-id>  

    <property name="TownName" column="TOWN_NAME" /> 
    <many-to-one name="LangId" column="LANG_ID"/> 
    </class> 
</hibernate-mapping> 

Aidez-moi à écrire fichier de mappage. Et si possible, avec des explications. Merci.

+0

Quelles sont les classes 'TownS' et' Languages'? –

Répondre

2

Le tableau Dic_Town_Strings devrait avoir une clé composite composé à la fois town_id et LANG_ID
Et la propriété LANGID devraient être cartographiés par un grand nombre à une relation avec votre mappage de classe de langue (ou changer les villes LANGID déclaration de propriété int au lieu de la langue)

+0

J'ai mis à jour ma cartographie. Découvrez, s'il vous plaît. – user348173

+0

Vous avez corrigé langId deux fois – sternr

+0

: corrigé, mais j'ai l'erreur suivante: Impossible de déterminer un type de propriété pour: LangId – user348173

1

Pourquoi ne pas

public class Town 
{ 
    public virtual int TownId { get; private set; } 

    public virtual Dict<Language, string> AllNames { get; private set; } 

    public virtual string TownName 
    { 
     get { return AllNames[CurrentLanguage]; } 
    } 

} 

cartographie:

<class name="Town"> 
<id ...> 
<map name="AllNames"> 
    <key column="TOWN_ID"/> 
    <index column="LANG_ID"/> 
    <element column="TOWN_NAME" /> 
</map> 

Il n'y a pas de clé composite autour, tout est simple ...

+0

Il existe des clés composites, dans le Table2: TownId et LangId – user348173

+0

@ user348173: oui, bien sûr, mais pas mappé comme ID. C'est important. Les identifiants composites devraient être évités. –

Questions connexes