Thanks Pete for the suggestions. These tips are very welcome. I go try 
implement those (I really like the filters).

Op maandag 8 april 2013 10:43:36 UTC+2 schreef PeteA het volgende:
>
> You can map this with the <join> element (
> http://nhforge.org/doc/nh/en/index.html#mapping-declaration-join) - 
> however, that's not necessarily a good approach.  I'm assuming that there's 
> a "current locale", e.g. for the current user?  I'm also a little 
> suspicious of the table structure - it feels to me as if there should 
> perhaps be a Locale entity encapsulating the LangCode and any other related 
> stuff, otherwise this is being repeated in multiple rows in multiple tables 
> which feels like a smell.
>
>  
>
> That said, would the following suggestion work for you:
>
>  
>
> 1.  Create a Locale entity as above, and a table to match
>
> 2.  Create a one-to-many relationship from Country & City to Locale with 
> an appropriate protected collection mapping (ISet seems logical)
>
> 3.  Add a filter to that (
> http://nhforge.org/doc/nh/en/index.html#objectstate-filters) relationship 
> which uses the current locale as a parameter and so results in exactly one 
> element returned
>
> 4.  Create public functions/properties which expose the single element in 
> this collection
>
>  
>
> The filter can be initialised globally by your IoC container.
>
>  
>
> Example (omiting important stuff like ctor's & null checks):
>
>  
>
> class Country {
>
>                 public int Id { get; protected set; }
>
>                 protected ISet<LocaleData> Locales { get; set; }
>
>                 public string LocalName { get { return 
> Locales.First().Name; } set { Locales.First().Name = value; } }
>
> }
>
>  
>
> Re. City.CountryId, my suggestion would be to access that via the the 
> Country association rather than exposing it directly.
>
>  
>
> /Pete
>
>  
>
> *From:* [email protected] <javascript:> [mailto:
> [email protected] <javascript:>] *On Behalf Of *Patrick Sannes
> *Sent:* 06 April 2013 13:25
> *To:* [email protected] <javascript:>
> *Subject:* [nhusers] Mapping localization tables in Nhibernate
>
>  
>
> Im building a localized application. All data needs to be available in 
> different languages. As a storage model I try to use Nhibernate because of 
> the better performance over Entity Framework. I store a root node in the 
> database to get a unique Id for an entity and then I have a second table 
> with the child nodes per language (the locale table).
>
> My database table looks like:
>
> Country
>
>    Int Id;
>
> Country_Locale
>
>    Int Id;
>
>    Int CountryId;
>
>    String LangCode;
>
>    String Name;
>
>  
>
> City
>
>    Int Id;
>
>    Int CountryId;
>
> City_Locale
>
>    Int Id;
>
>    Int CityId;
>
>    String LangCode;
>
>    String Name;
>
> My prefered Entities would look like
>
> Country
>
>   Int Id (from Coutry table)
>
>   String LangCode (from locale table)
>
>   String Name (from locale table)
>
>   IList<City> Cities (Referenced to City entity)
>
> City
>
>   Int Id (From City table)
>
>   String LangCode (from locale table)
>
>   String Name (from locale table)
>
>   Country Country (Referenced to Country entity)
>
>   Int CountryId (From country table)
>
> I realize that I cannot map the above, but it is a sort of the structure I 
> would prefer. How could I do this mapping or are there other suggestions.
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "nhusers" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] <javascript:>.
> To post to this group, send email to [email protected] <javascript:>
> .
> Visit this group at http://groups.google.com/group/nhusers?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers?hl=en-US.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to