What are your plans from a versioning perspective? This is a pretty sizable
breaking change. Should we start maintaining a 2.0 branch? I'm just not sure
if pushing the changes directly into the current master is a good idea.

On Mon, Aug 30, 2010 at 4:17 AM, James Gregory <jagregory....@gmail.com>wrote:

> I've updated the branch with basic support for custom collections, it
> should be able to infer a lot of the same stuff it can with regular
> collections; for other cases, you'll need to specify it manually.
>
> I've also just renamed the methods to be more inline with the conceptual
> naming, rather than NHibernate specific.
>
> So for anyone that's used this so far:
>
> Key -> ForeignKey
> Index -> DictionaryKey
> Element -> DictionaryValue
>
> If nobody has any objections, I'll merge this into master soon.
>
> 2010/8/10 Asbjørn Ulsberg <asbjo...@gmail.com>
>
> First I want to say that I love this rewrite. Convention over
>> configuration always wins in my opinion, as long as the conventions
>> follow sensible defaults and best practices, which seems to be the
>> case.
>>
>> Second I'd like to agree with Nick in that FNH serves its users best
>> when it mirrors how the programmer thinks when he designs his objects
>> and not how he would think if he was going to map the same object with
>> HBM XML. Renaming "index" to "key" and "element" to "value" makes a
>> lot of sense in that case. The same goes with renaming "key" to
>> "ForeignKey".
>>
>> I haven't poked around with the code yet, but I have one question;
>> since the new dictionary mapping infers a lot more than previously,
>> how does it now handle custom collection implementations? Is that left
>> up to NHibernate to eventually blow up on if not configured right or
>> will FNH warn about it? And how would you set up a custom collection
>> implementation -- the same way as with HasMany?
>>
>>
>> -Asbjørn
>>
>>
>>
>> On 4 Aug, 17:05, Nick Webb <nwe...@gmail.com> wrote:
>> > Fluent NHibernate is, after all, a big facade of NHibernate's xml
>> mappings,
>> > no?  Being a facade, I would not concern myself with how literal the
>> fluent
>> > methods resemble the hbm context, as you said it yourself: you aren't
>> > necessarily looking to recreate the xml in c#.  Instead, I'd follow a
>> > philosophy of how the methods best represent how the object property is
>> > being mapped.  That's my opinion, anyway.
>> >
>> > So you're example of Index -> Key and Element -> Value seems very
>> > appropriate, especially for those not interested in learning how to
>> rebuild
>> > an hbm map the 'fluent' way.
>> >
>> > To continue this approach:
>> > Index = Key
>> > Element = Value
>> > Key = ForeignKey
>> >
>> > My $0.02.
>> >  - nick
>> >
>> > On Wed, Aug 4, 2010 at 6:18 AM, James Gregory <jagregory....@gmail.com
>> >wrote:
>> >
>> >
>> >
>> > > It's a hard one, and something that thoroughly annoys me about
>> nhibernate
>> > > maps. They're consistent with the other collections in naming, but the
>> > > element behaviour/intent is different.
>> >
>> > > <map> : Dictionary
>> > >  <key> : Foreign key
>> > >  <index> : Dictionary.Key
>> > >  <element> : Dictionary.Value
>> >
>> > > I'd like to rename Index to Key and Element to Value, but I think that
>> > > might be too different (and Key could then be confused for the <key>
>> > > element).
>> >
>> > > I'm open to suggestions though.
>> >
>> > > On 4 Aug 2010, at 10:48, Rasmoo <ras...@gmail.com> wrote:
>> >
>> > > > It looks really nice and accessible. One minor nitpick though:
>> >
>> > > > When writing the hbm.xml files, it's fairly obvious when index is a
>> > > > collection index, and when it's a database index. However, I might
>> now
>> > > > write:
>> >
>> > > > Map(x => x.Name)
>> > > >  .Index("IX_SomeTable_Name");
>> > > > HasMany(x => x.Comments)
>> > > >  .Index("Author");
>> >
>> > > > Which causes me (and maybe just me) some cognitive dissonance. I
>> know
>> > > > it does not match the NHibernate vocabulary, but perhaps something
>> > > > like CollectionIndex or IndexColumn would create the right
>> > > > association?
>> >
>> > > > On Aug 2, 11:07 pm, James Gregory <jagregory....@gmail.com> wrote:
>> > > >> Hello everyone,
>> >
>> > > >> I've been working on something that I've been promising to do for a
>> long
>> > > >> time, rewrite our <map>/IDictionary functionality. It's not a shiny
>> new
>> > > >> feature or anything like that, but it's a nasty area of our user
>> > > interface
>> > > >> and codebase as a whole that has needed redoing for a long time.
>> >
>> > > >> I've put a branch up on the github repository with the work so far.
>> This
>> > > is
>> > > >> very much a work in progress, and several things are unimplemented
>> (most
>> > > >> attributes, for example) but the general structure is present. I'd
>> > > >> appreciate it if anyone who has some spare time would take a look,
>> > > >> especially people who've had problems with <map>/IDictionary's in
>> the
>> > > past.
>> >
>> > > >> Branch:
>> http://github.com/jagregory/fluent-nhibernate/tree/map-refactor
>> >
>> > > >> The refactoring is based on the following principal: infer or
>> assume as
>> > > much
>> > > >> as possible, while providing a way for the user to customise as
>> much as
>> > > >> needed.
>> >
>> > > >> The HasMany and HasManyToMany dictionary overloads now return a new
>> > > builder
>> > > >> instance, instead of the general collection builder as before. This
>> new
>> > > >> builder is tailored specifically to dictionary mappings, and thus
>> is
>> > > much
>> > > >> more specialised (and simpler in implementation). This is also why
>> > > several
>> > > >> features are currently unavailable, because they need to be
>> > > reimplemented in
>> > > >> the new builder (I'm deliberately keeping the classes separate, to
>> avoid
>> > > the
>> > > >> mess we have currently).
>> >
>> > > >> Indirectly due to these changes, the following methods have been
>> > > deprecated
>> > > >> and/or removed entirely:
>> >
>> > > >>    - AsMap
>> > > >>    - AsEntityMap
>> > > >>    - AsTernaryAssociation
>> > > >>    - AsSimpleAssocation
>> > > >>    - ParentKeyColumn (now just Key())
>> >
>> > > >> The mappings that all those methods created are entirely doable
>> using
>> > > the
>> > > >> new interface. When these changes get merged into master, removed
>> > > methods
>> > > >> may be reintroduced and marked as obsolete rather than being
>> removed
>> > > >> entirely.
>> >
>> > > >> *A few examples:*
>> >
>> > > >> HasMany(x => x.Comments);
>> >
>> > > >> Where Comments is an IDictionary<string, string> would create a
>> <map>
>> > > with
>> > > >> an <element>, with Key and Value as the column names.
>> >
>> > > >> HasMany(x => x.Comments)
>> > > >>   .Element("Content");
>> >
>> > > >> Same as above, except with the element column overridden.
>> >
>> > > >> HasMany(x => x.Comments)
>> > > >>   .Index("Author");
>> >
>> > > >> Same as above, except the index (dictionary key) column is
>> overridden.
>> >
>> > > >> There's similar overloads for CompositeIndex, CompositeElement,
>> > > OneToMany,
>> > > >> and ManyToMany. Each method has a couple of simplistic signatures
>> > > (string
>> > > >> for column name, generic type for column type) and a lambda-based
>> > > signature
>> > > >> for advanced configuration.
>> >
>> > > >> HasMany(x => x.Comments)
>> > > >>   .Index(ix =>
>> > > >>   {
>> > > >>     ix.AsManyToMany();
>> > > >>     ix.Column("one");
>> > > >>     ix.Column("two");
>> > > >>     ix.ForeignKey("FK_something");
>> > > >>   });
>> >
>> > > >> You get the idea.
>> >
>> > > >> Feedback is much appreciated, and none of this is set in stone (or
>> > > complete)
>> > > >> yet.
>> >
>> > > > --
>> > > > You received this message because you are subscribed to the Google
>> Groups
>> > > "Fluent NHibernate" group.
>> > > > To post to this group, send email to
>> fluent-nhibern...@googlegroups.com.
>> > > > To unsubscribe from this group, send email to
>> > > fluent-nhibernate+unsubscr...@googlegroups.com<fluent-nhibernate%2bunsubscr...@googlegroups.com>
>> <fluent-nhibernate%2bunsubscr­...@googlegroups.com>
>> > > .
>> > > > For more options, visit this group at
>> > >http://groups.google.com/group/fluent-nhibernate?hl=en.
>> >
>> > > --
>> > > You received this message because you are subscribed to the Google
>> Groups
>> > > "Fluent NHibernate" group.
>> > > To post to this group, send email to
>> fluent-nhibern...@googlegroups.com.
>> > > To unsubscribe from this group, send email to
>> > > fluent-nhibernate+unsubscr...@googlegroups.com<fluent-nhibernate%2bunsubscr...@googlegroups.com>
>> <fluent-nhibernate%2bunsubscr­...@googlegroups.com>
>> > > .
>> > > For more options, visit this group at
>> > >http://groups.google.com/group/fluent-nhibernate?hl=en.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Fluent NHibernate" group.
>> To post to this group, send email to fluent-nhibern...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> fluent-nhibernate+unsubscr...@googlegroups.com<fluent-nhibernate%2bunsubscr...@googlegroups.com>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/fluent-nhibernate?hl=en.
>>
>>
>  --
> You received this message because you are subscribed to the Google Groups
> "Fluent NHibernate" group.
> To post to this group, send email to fluent-nhibern...@googlegroups.com.
> To unsubscribe from this group, send email to
> fluent-nhibernate+unsubscr...@googlegroups.com<fluent-nhibernate%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/fluent-nhibernate?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to fluent-nhibern...@googlegroups.com.
To unsubscribe from this group, send email to 
fluent-nhibernate+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en.

Reply via email to