Свободное отображение NHibernate HasManyToMany () - PullRequest
10 голосов
/ 24 августа 2009

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

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

NHibernate.PropertyAccessException: исключение произошло, метод получения проекта. 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 Ответ

15 голосов
/ 24 августа 2009

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

 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 и некоторых других свойств.

...