2009-08-24 9 views
10

Tengo un problema en el ejemplo de Fluiber NHibernate que utiliza las relaciones de Muchos a Muchos. Traté de encontrar ejemplos en un caso similar, y encontré toneladas, pero sigo teniendo el mismo problema.Fluido NHibernate HasManyToMany() Asignación

Cuando se ejecuta el proyecto de prueba, la excepción siguiente:

NHibernate.PropertyAccessException: Se produjo excepción captador de project.Entities.User.UserName ---> System.Reflection.TargetException: El objeto no partido tipo de objetivo.

Ésta es una imagen de las tablas:

Tables

y el código

public UsersMap() 
    { 

     this.Table("Users"); 
     Id(x => x.UserName).Column("Username").GeneratedBy.Assigned(); 

     Map(x => x.FirstName); 
     Map(x => x.LastName); 
     Map(x => x.Password); 
     Map(x =>x.EMail); 
     Map(x => x.Title); 
     Map(x => x.Division); 


     HasManyToMany<User>(x => x.Roles) 
      .Table("UserInRoles").ParentKeyColumn("Username") 
      .ChildKeyColumn("Usernamepk") 
      .Cascade.SaveUpdate().LazyLoad(); 


    } 

    public RolesMap() 
    { 
     this.Table("Roles"); 
     Id(x => x.ID).GeneratedBy.Assigned().Column("ID"); 
     Map(x => x.RoleName).Length(50); 

     HasManyToMany<User>(x => x.Users) 
      .Table("UserInRoles").ParentKeyColumn("ID") 
      .ChildKeyColumn("RoleIdpk").Cascade.SaveUpdate().LazyLoad(); 

    } 

Este es el código, la mayoría de los ejemplos en la web y la página de asignaciones Fluido Nhibernate están escritos en de la misma manera, entonces ¿alguna idea?

Respuesta

15

En cuanto al código que estoy utilizando en mi proyecto yo definiría sus relaciones de muchos a muchos de esta manera:

public UsersMap() 
    { 
... 
      HasManyToMany(x => x.Roles) 
       .WithTableName("UserInRoles") 
       .WithParentKeyColumn("Usernamepk") 
       .WithChildKeyColumn("RoleIdpk"); 
    } 

    public RolesMap() 
    { 
... 
      HasManyToMany(x => x.Users) 
       .WithTableName("UserInRoles") 
       .WithParentKeyColumn("RoleIdpk") 
       .WithChildKeyColumn("Usernamepk"); 

    } 

Tal definiciones funciona para mí. Verifique esto primero y luego decore con LazyLoading y algunas otras propiedades.

+4

por cierto, im utilizando la versión 1.0 Fluido, por lo que el .WithTableName() es la tabla() en su lugar, de todos modos, traté de usarlo sin lazyload y otros defeintions, pero sigue siendo la misma excepción: S – Saeedouv

+1

¿Seguro que necesita ser mapeado ambos lados? – UpTheCreek

+0

Para mi situación, no quiero atacar en dos direcciones. Tengo compañía, persona y dirección y cada compañía o persona puede tener más de 1 dirección. En esta situación, ¿qué debería hacer? – uzay95

Cuestiones relacionadas