Ok, guys, I think I have found the solution

An optional join table is fine, it works as expected and allows you to 
associate an 'extension' table with the entity
The only problem was dynamic component mapping to a dictionary.
I replaced it with direct property mapping (without a component), but with 
a map property accessor (NHibernate.Properties.MapAccessor, NHibernate)
This accessor assumes your entity class implements IDictionary and will 
put/retrieve mapped properties through that dictionary interface. You can 
intercept these calls and do whatever you want with the data. So, a 
dictionary mapping, but without being limited to a single dynamic 
component. I didn't test this approach too deep, hopefully there are no 
traps...

Best regards
R

W dniu niedziela, 20 lipca 2014 13:34:04 UTC+2 użytkownik rg napisał:
>
> Hi, i'm trying to create a class with several optionally joined tables 
> containing extension properties. There are several extension tables because 
> they contain some optional, predefined property sets that can be turned on 
> or off for some records based on configuration. There's no problem with 
> mapping the optional joins, but the trouble begins when I'd like to map all 
> these extension columns to a dictionary property in my C# data object. I 
> tried using dynamic component for each of joined table mapping, but 
> NHIbernate complains that I can't define more than one mapping for the 
> dictionary. So, using a dynamic component, I'm able to map at most one 
> extension table and I don't see any way to 'fix' that.
>
> Here's my mapping code, hope it explains what i'm trying to achieve
>
> public class UserRequestMap : FluentNHibernate.Mapping.SubclassMap<
> UserRequest>
>     {
>         public UserRequestMap() 
>         {
>             NLog.LogManager.GetCurrentClassLogger().Warn("Mapping urq");
>             DiscriminatorValue(2);
>             References(x => x.EndUser).Not.Nullable();
>             Join("ext_UserRequest_1", jm => {
>                      jm.Optional();
>                      jm.DynamicComponent(x => x.DynamicFields, dm => {
>                                          dm.Map<decimal>("amount");
>                                          dm.Map<int>("size");
>                                          dm.Map<string>("item_name").
> Nullable();
>                                      });
>                  });
>             Join("ext_UserRequest_2", jm => {
>                      jm.Optional();
>                      jm.DynamicComponent(x => x.DynamicFields, dm => {
>                                              dm.Map<int>("service_number"
> );
>                                              dm.Map<DateTime>("order_date"
> ).Not.Nullable();
>                                              dm.Map<string>(
> "service_codes").Nullable();
>                                          });
>                  });
>
>
> So, I have a 'UserRequest' table that optionally can join to 
> 'ext_UserRequest_1' and 'ext_UserRequest_2' tables.
> The 'ext_UserRequest_1' table contains 3 columns: 'amount', 'size' and 
> 'item_name' (plus a key column with UserRequest ID), and the 
> 'ext_UserRequest_2' contains service_number, order_date and service_codes 
> columns.
> As you see, all these additional column names are unique so they could be 
> mapped to same dictionary without confusion. But for some reason NHibernate 
> will allow only the first table to be mapped.
> Could you suggest something? I want to be able to map these extension 
> tables dynamically, without modifying C# object structure.
>
> Thanks
> R
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to