That's a lot of steps, we should probably try to simplify that at some
stage. Nice work though.

On Mon, Jun 1, 2009 at 3:37 PM, Martin Hornagold <
martin.hornag...@marstangroup.com> wrote:

>  Brian,
>
> The steps to solving your problem are as follows:
>
> 1. Change your default primary key convention to only accept integral types
> and or ignore anything assigned by the AssignedKeyConvention:
>
>    public bool Accept(IIdentityPart target)
>    {
>        return !(new AssignedIdConvention().Accept(target) &&
>                  IsIntegralType(target.IdentityType);
>    }
>
>    private static bool IsIntegralType(Type t)
>    {
>       return t == typeof (int) || t == typeof (int?)
>        || t == typeof (long) || t == typeof (long?)
>           || t == typeof (uint) || t == typeof (uint?)
>           || t == typeof (ulong) || t == typeof (ulong?)
>           || t == typeof (byte) || t == typeof (byte?)
>           || t == typeof (sbyte) || t == typeof (sbyte?)
>           || t == typeof (short) || t == typeof (short?)
>           || t == typeof (ushort) || t == typeof (ushort?);
>     }
>
> 2. Add an AssignedKeyConvention which accepts the TblAspnetUsers entity
> (and any others that have assigned keys) and applies the Assigned generator
> to the identity:
>
>      public class AssignedKeyConvention : IIdConvention
>      {
>          public bool Accept(IIdentityPart target)
>          {
>              return target.EntityType
>          }
>
>         public void Apply(IIdentityPart target)
>         {
>            target.GeneratedBy.Assigned();
>         }
>     }
>
>
> 3. modify your table name convention to ignore any EntityType which breaks
> the convention:
>
>     public bool Accept(IClassMap target)
>     {
>         return target.EntityType != typeof(TblAspnetUsers)
>     }
>
>     public void Apply(IClassMap target)
>     {
>         target.WithTable(Inflector.Net.Inflector.Pluralize(
> target.EntityType.Name));
>     }
>
> I think you may have fallen into the trap of many in thinking that
> AutoMapping overrides override the conventions.
> The conventions are applied afterwards.
>
> HTH
>
>  ------------------------------
> *From:* fluent-nhibernate@googlegroups.com [mailto:
> fluent-nhibern...@googlegroups.com] *On Behalf Of *Stuart Childs
> *Sent:* 01 June 2009 14:44
> *To:* fluent-nhibernate@googlegroups.com
> *Subject:* [fluent-nhib] Re: Problems with guid primary keys and
> WithTable()
>
> Hudson is referring to the Id(...).GeneratedBy bit. Since you are using a
> Guid primary key, you need to call one of the following:
> Id(...).GeneratedBy.Guid(); // NH will call Guid.NewGuid()
> Id(...).GeneratedBy.GuidComb(); // Uses the Guid Comb algorithm to improve
> performance and indexing capabilities
> Id(...).GeneratedBy.Assigned(); // NH expects *you* to assign an ID before
> calling .Save()
>
> As for the " I get an "Identity type
> must be integral (int, long, uint, ulong)" error." that means that
> somewhere in your code you are calling Id(...).GeneratedBy.Identity().
> Identity columns are integer (usually auto-incrementing) columns. As such,
> it makes no sense to tell NH that an integer column on the database maps to
> a Guid value in code. FNH helpfully throws an exception telling you that it
> must be integral(int, long, uint, ulong).
>
> Hope that helps.
>
> On Mon, Jun 1, 2009 at 8:14 AM, Brian Kendig <br...@enchanter.net> wrote:
>
>>
>> On May 29, 6:17 pm, Hudson Akridge <hudson.akri...@gmail.com> wrote:
>> > I believe your generator class should be Assigned.
>>
>> Which generator class? I don't follow...
>>
>>
>>
>>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to fluent-nhibernate@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