No problem :) That overload is a little unclear, I'll bare that in mind when
we look to improve AsMap.

On Mon, Jul 27, 2009 at 6:40 PM, Everett Muniz <[email protected]>wrote:

> Doh...subtle are the ways of the fluent mapping :-).  Thanks big, big
> James.  That was it.  I should have caught that.
>
> For the record, here's the mapping that gets me what I want...
>
> HasMany<ColorMapEntry>(Reveal.Property<ColorMap>("Entries"))
>     .AsMap<string>("Value")
>     .KeyColumnNames.Add("ColorMapID")
>     .WithTableName("ColorMapEntry")
>     .Component(c =>
>     {
>         c.Map(x => x.Alpha);
>         c.Map(x => x.Blue);
>         c.Map(x => x.Green);
>         c.Map(x => x.Red);
>     })
>     .Cascade.AllDeleteOrphan();
> }
>
>
> On Mon, Jul 27, 2009 at 1:35 PM, James Gregory <[email protected]>wrote:
>
>> I could be wrong, this is off the top of my head, but I think the AsMap
>> method can take a generic parameter for the type. Try replacing your
>> AsMap("Value") with AsMap<string>("Value")
>>
>>
>> On Mon, Jul 27, 2009 at 6:32 PM, Everett Muniz <[email protected]>wrote:
>>
>>> I have a situation where an entity has a list of value objects associated
>>> with it.  Given that the objects are value objects from the domain model
>>> point-of-view I'd rather not have the class cluttered up with properties
>>> just to support database mapping.  So, I'm using the mapping...
>>>
>>> HasMany<ColorMapEntry>(Reveal.Property<ColorMap>("Entries"))
>>>     .AsMap("Value")
>>>     .KeyColumnNames.Add("ColorMapID")
>>>     .WithTableName("ColorMapEntry")
>>>     .Component(c =>
>>>     {
>>>         c.Map(x => x.Alpha);
>>>         c.Map(x => x.Blue);
>>>         c.Map(x => x.Green);
>>>         c.Map(x => x.Red);
>>>     })
>>>     .Cascade.AllDeleteOrphan();
>>> }
>>>
>>> This produces the hbml...
>>>
>>>     <map name="Entries" cascade="all-delete-orphan"
>>> table="ColorMapEntry">
>>>       <key column="ColorMapID" />
>>> *      <index type="System.Int32, mscorlib, Version=2.0.0.0,
>>> Culture=neutral, PublicKeyToken=b77a5c561934e089" column="Value" />*
>>>       <composite-element
>>> class="GBS.VersiLabel.Core.Domain.Model.ColorMapEntry, GBS.VersiLabel.Core,
>>> Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
>>>         <property name="Alpha">
>>>           <column name="Alpha" />
>>>         </property>
>>>         <property name="Blue">
>>>           <column name="Blue" />
>>>         </property>
>>>         <property name="Green">
>>>           <column name="Green" />
>>>         </property>
>>>         <property name="Red">
>>>           <column name="Red" />
>>>         </property>
>>>       </composite-element>
>>>     </map>
>>>
>>> This mapping is almost perfect but I'm stuck at how to effect the 'type'
>>> attribute of the highlighted index element.  The type of the column 'Value'
>>> should be 'string' but I don't see how to set that.
>>>
>>> The 'Entries' property referred to by the <map> element looks like
>>> this...
>>>
>>> protected internal virtual IDictionary<string, ColorMapEntry> Entries
>>> {
>>>     get
>>>     {
>>>         if (_entries == null)
>>>         {
>>>             _entries = new Dictionary<string, ColorMapEntry>();
>>>         }
>>>         return _entries;
>>>     }
>>>     set { _entries = value; }
>>> }
>>>
>>> I don't know that it will be helpful but the ColorMapEntry class looks
>>> like this...
>>>
>>> public class ColorMapEntry
>>> {
>>>     private const int ColorPartMax = 255;
>>>     private const int ColorPartMin = 0;
>>>
>>>     private static bool colorPartInRange(int colorPart)
>>>     {
>>>         return colorPart >= ColorPartMin && colorPart <= ColorPartMax;
>>>     }
>>>
>>>     private static bool not(bool value)
>>>     {
>>>         return !(value);
>>>     }
>>>
>>>     protected internal ColorMapEntry()
>>>     {
>>>     }
>>>
>>>     public ColorMapEntry(int alpha, int red, int green, int blue)
>>>     {
>>>         if (not(colorPartInRange(alpha)))
>>>             throw new ArgumentException("alpha is not between 0 and
>>> 255.");
>>>         if (not(colorPartInRange(red)))
>>>             throw new ArgumentException("red is not between 0 and 255.");
>>>         if (not(colorPartInRange(green)))
>>>             throw new ArgumentException("green is not between 0 and
>>> 255.");
>>>         if (not(colorPartInRange(blue)))
>>>             throw new ArgumentException("blue is not between 0 and
>>> 255.");
>>>
>>>         this.Alpha = alpha;
>>>         this.Red = red;
>>>         this.Green = green;
>>>         this.Blue = blue;
>>>     }
>>>
>>>     public ColorMapEntry(int red, int green, int blue)
>>>         : this(255, red, green, blue)
>>>     {
>>>     }
>>>
>>>     public ColorMapEntry(Color color)
>>>         : this(color.A, color.R, color.G, color.B)
>>>     {
>>>     }
>>>
>>>     public virtual int Alpha { get; set; }
>>>
>>>     public virtual int Blue { get; set; }
>>>
>>>     public virtual int Green { get; set; }
>>>
>>>     public virtual int Red { get; set; }
>>> }
>>>
>>>
>>>
>>
>>
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to