【问题标题】:Fluent NHibernate HasManyToMany() Mapping流畅的 NHibernate HasManyToMany() 映射
【发布时间】:2010-11-22 05:27:09
【问题描述】:

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

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

NHibernate.PropertyAccessException:project.Entities.User.UserName 的 getter 发生异常 ---> System.Reflection.TargetException:对象没有 匹配目标类型。

这是一张桌子的图片:

和代码

 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 映射页面都是以相同的方式编写的,所以有什么想法吗?

【问题讨论】:

    标签: nhibernate orm mapping fluent


    【解决方案1】:

    关于我在项目中使用的代码,我会这样定义你的 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");
    
        }
    

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

    【讨论】:

    • 顺便说一句,我使用的是 Fluent 1.0 版,所以 .WithTableName() 是 Table() ,无论如何,我尝试在没有延迟加载和其他定义的情况下使用它,但仍然是相同的例外:S跨度>
    • 你确定两边都需要映射吗?
    • 对于我的情况,我不想绑定两种方式。我有公司、个人和地址,每个公司或个人可能有多个地址。这种情况我该怎么办?
    • 我不认为你需要映射双方。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2016-01-17
    相关资源
    最近更新 更多