Свободное NHibernate HasManyToMany() Сопоставление

У меня проблема с Fluent NHibernate, используя отношения "многие-ко-многим". Я попытался найти примеры в аналогичном случае, и я нашел тонны, но у меня все еще такая же проблема.

При запуске тестового проекта создается следующее исключение:

NHibernate.PropertyAccessException: Исключено событие getter проекта .Entities.User.UserName --- > System.Reflection.TargetException: объект не сопоставить тип цели.

Это изображение таблиц:

Tables

и код

 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();

    }

вот код, большинство примеров в Интернете и страница сопоставлений Fluent Nhibernate написаны таким же образом, поэтому любые идеи?

Ответ 1

Что касается кода, который я использую в своем проекте, я бы определил ваши отношения с многими людьми следующим образом:

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

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

    }

Такие определения работают для меня. Сначала проверьте это, затем украсьте LazyLoading и некоторые другие свойства.