Ahh yes, of course. Indeed, this expression from my code above is never executed:
(string)x[temp] It is converted to an expression tree and inspected. The code that does this inspection is -very- basic, I can see how this won't work currently. Maybe we should add a Map overload for dynamic components that just takes a string instead of a lambda expression? On Sun, Jun 21, 2009 at 4:33 AM, rob <[email protected]> wrote: > > Hmm..then my code should work too..i'll have to take a closer look on > Monday. > > But.... I think what you're saying makes sense if you were invoking > the funcion declared in the lamda within the same scope; it would use > the temp variable declared in the loop. But, in this case, the > function is invoked in a different class (RefelectionHelper I > believe), and that class doesn't declare a variable called temp. > Also, I can't remember the code now, but I don't think fluent ever > invokes the funciotn declared by the lambda; it just examines the > expression tree to pull out properties for the purposes of generating > the mapping. And when it does, it won't know what to do w/ "temp". > Hopefully I'm wrong. :) > > On Jun 20, 12:19 pm, James Gregory <[email protected]> wrote: > > Rob: Just FYI, as far as I understand temp will still exist at the time > > because it's used within the closure. .Net imports that variable into the > > lambda's scope. > > > > On Sat, Jun 20, 2009 at 4:32 PM, Pablo Ruiz <[email protected]> > wrote: > > > > > private void SetupComponentParts(DynamicComponentPart<IDictionary> > part) > > > { > > > IList<string> dynamicColumns = GetCustomerColumns(); > > > foreach(string col in dynamicColumns) > > > { > > > string temp = col; // Avoid any modified closure issues. > > > c.Map(x => (string)x[temp]); > > > } > > > } > > > > > DynamicComponent(x => x.AdditionalFields, c => SetupComponentParts(c)); > > > > > That's it.. > > > > > On Sat, Jun 20, 2009 at 5:11 PM, rob <[email protected]> wrote: > > > > >> Funny...this is exactly my situation. See my post on Dynamic > > >> components from a couple days ago. Unfortunately, this statement won't > > >> work: > > >> c.Map(x => (string)x[temp]); > > > > >> because the variable temp isn't evaluated in the loop; the statement > > >> is turned into an expression tree and evaluated later; at which time > > >> "temp" won't exist. I've been trying all sorts of things the past few > > >> days, and may be close to a solution involvoing manually building the > > >> expression tree. Should know more on Monday. Keep me posted if you > > >> figure something out! > > > > >> On Jun 20, 8:45 am, Paul Batum <[email protected]> wrote: > > >> > Hi Silvia, > > > > >> > Can the column details be discovered at startup time? I'm thinking > of > > >> > something like this: > > > > >> > IList<string> dynamicColumns = GetCustomerColumns(); > > >> > DynamicComponent(x => x.AdditionalFields, c =>{ > > >> > foreach(string col in dynamicColumns) > > >> > { > > >> > string temp = col; // Avoid any modified closure issues. > > >> > c.Map(x => (string)x[temp]); > > >> > } > > > > >> > }); > > > > >> > Paul Batum > > > > >> > On Tue, Jun 16, 2009 at 10:10 AM, Silvia <[email protected]> > wrote: > > > > >> > > I have the below situation that I need help figure it out. > > >> > > I am using fluent nhibernate with a legacy database. I need to map > > >> > > some additional columns to a dictionary(?) property in my entity > > >> > > dynamically, because I do not know the number of columns and > column > > >> > > names and other specifications at compile time and I dynamically > need > > >> > > to work with those columns(insert,update...).There is another > object > > >> > > which has those information and has a relationship with my main > entity > > >> > > based on the value of two other columns.Is this possible in > > >> > > nhibernate? > > >> > > I tried to use DynamicComponent but the problem is I don't know > what > > >> > > would be the properties in my component. > > >> > > I have something like this: > > > > >> > > In Entity.cs : > > >> > > public virtual IDictionary AdditionalFields { get; set; } > > >> > > public virtual Info AdditionalFieldsInfo{get; set;} > > > > >> > > And in EntityMap.cs: > > >> > > References(x => x.AdditionalFieldsInfo); > > >> > > and I supposedly should have something like this: > > >> > > DynamicComponent(x => x.AdditionalFields , m => > > >> > > { > > >> > > m.Map(?Which I don't know how to map because I dont have the > number of > > >> > > columns to be mapped and column names.These information needs to > come > > >> > > from AdditionalFieldsInfo); > > >> > > }); > > > > >> > > I also posted the question to nhusers group( > [email protected]) > > >> > > but I still not very sure how to implement this. > > >> > > I do appreciate if someone could help. > > >> > > Thanks. > > >> > > Silvia > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Fluent NHibernate" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/fluent-nhibernate?hl=en -~----------~----~----~----~------~----~------~--~---
