流畅的NHibernate HasManyToMany()映射

Sae*_*ouv 10 mapping nhibernate orm fluent

我在使用多对多关系的Fluent NHibernate示例中遇到了问题.我试图找出类似案例的例子,我发现了吨,但我仍然遇到同样的问题.

运行测试项目时,抛出以下异常:

NHibernate.PropertyAccessException:发生异常project.Entities.User.UserName ---> System.Reflection.TargetException:Object与目标类型不匹配.

这是表格的图像:

表

和代码

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

    }
Run Code Online (Sandbox Code Playgroud)

这里是代码,Web上的大多数示例和Fluent Nhibernate映射页面都以相同的方式编写,所以任何想法?

twk*_*twk 15

关于我在我的项目中使用的代码,我将以这种方式定义你的manyTomany关系:

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

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

    }
Run Code Online (Sandbox Code Playgroud)

这样的定义对我有用.先检查一下,然后使用LazyLoading和其他一些属性进行装饰.

  • 顺便说一句,即时通讯使用Fluent版本1.0,所以.WithTableName()是Table(),反正,我试图使用它没有lazyload和其他缺点,但仍然是相同的例外:S (4认同)