Hi Jeremy, I think you're muddling up the concept of database indexes with a column that happens to be called idx for the purpose of ordering entries. Lists are ordered whereas sets/bags are not. When you have a list collection an index column is added so that when a list collection is persisted and later retrieved the order remains unchanged.
There is an argument that FNH should automatically map IList<T> collections using AsList(), ISet<T> using AsSet() etc. I'll raise this as an issue. James. On Mar 26, 11:24 pm, Jeremy Wadsack <[email protected]> wrote: > So I've found (along the lines of the previous post) that changing to > AsBag instead of AsList fixes this error (and introduces others that > I'll dig into). I don't really understand why. > > Can anyone shed light on that? > > - Jeremy > > On Mar 26, 3:33 pm, Jeremy Wadsack <[email protected]> wrote: > > > I have a class of users with permissions that are set from an enum. > > The database doesn't have a primary key in the permissions table, so I > > built a composite key. This all seems to work until I try to load/ > > write to the permissions table. Fluent NHibernate (or maybe just > > NHibernate) wants to insert a rogue column IDX. > > > See similar > > post:http://groups.google.com/group/fluent-nhibernate/browse_thread/thread... > > > I've pulled the latest source and still am having no luck. I've tried > > lots of suggestions from the couple instances I found like this > > (change AsList to AsSet, settings column names, ...). All the jiggery > > in the AdminMap class is just trying to get this working. No luck. > > > Any idea why this is happening or how to fix it? > > > TIA, > > > Jeremy Wadsack > > > --------------------------------------------------- > > Source: > > --------------------------------------------------- > > public class Admin > > { > > public virtual int Id { get; private set; } > > public virtual string Name { get; set; } > > public virtual string Password { get; set; } > > public virtual string Email { get; set; } > > public virtual IList<AdminAccess> AdminAccesses { get; private > > set; } > > > public Admin() { > > AdminAccesses = new List<AdminAccess>(); > > } > > } > > > public class AdminAccess > > { > > public virtual Admin Admin { get; set; } > > public virtual Function Function { get; set; } > > public virtual int GroupId { get; set; } > > // -- removed Equals implementations neede bu NHibernate for > > composite keys > > } > > > public class AdminMap : ClassMap<Admin> > > { > > public AdminMap() { > > WithTable("t_admin"); > > > Id(x => x.Id, "admin_id"); > > > Map(x => x.Name, "name"); > > Map(x => x.Email, "email"); > > Map(x => x.Password, "password"); > > > HasMany( x => x.AdminAccesses ) > > .AsList() > > .KeyColumnNames.Clear() > > .KeyColumnNames.Add( "admin_id" ) > > .Cascade.All() > > .Not.LazyLoad(); > > } > > } > > > public class AdminAccessMap : ClassMap<AdminAccess> > > { > > public AdminAccessMap() { > > WithTable("t_admin_access"); > > > UseCompositeId() > > .WithKeyProperty( x => x.Function, "function_id" ) > > .WithKeyProperty( x => x.GroupId, "group_id" ) > > .WithKeyReference( x => x.Admin, "admin_id" ); > > > References( x => x.Admin, "admin_id" ); > > > Map(x => x.GroupId, "group_id"); > > Map(x => x.Function, "function_id"); > > > } > > } > > > ------------------------------------------------------ > > And here's the DDL that it spits out: > > ------------------------------------------------------ > > > create table t_admin ( > > admin_id INT IDENTITY NOT NULL, > > email NVARCHAR(255) null, > > password NVARCHAR(255) null, > > name NVARCHAR(255) null, > > primary key (admin_id) > > ) > > create table t_admin_access ( > > function_id INT not null, > > group_id INT not null, > > admin_id INT not null, > > idx INT null, > > primary key (function_id, group_id, admin_id) > > ) > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
