Fluent nhibernate Fluent NHibernate映射帮助

Fluent nhibernate Fluent NHibernate映射帮助,fluent-nhibernate,nhibernate-mapping,fluent,Fluent Nhibernate,Nhibernate Mapping,Fluent,我得到以下错误: 计数为3的此OracleParameterCollection的索引3无效 当我试图在表中插入新列时 我的实体类是: public class Operator { public Operator() { this.OperatorMemberships = new List<OperatorMembership>(); } public virtual int Id { get; set; } public

我得到以下错误:

计数为3的此OracleParameterCollection的索引3无效

当我试图在表中插入新列时

我的实体类是:

public class Operator
{
    public Operator()
    {
        this.OperatorMemberships = new List<OperatorMembership>();
    }
    public virtual int Id { get; set; }
    public virtual int OperatorMembershipId { get; set; }
    public virtual int SchemeId { get; set; }
    public virtual string Description { get; set; }
    public virtual IList<OperatorMembership> OperatorMemberships { get; set; }
}

public class OperatorMembership
{
    public virtual int Id { get; set; }
    public virtual int OperatorId { get; set; } // delete
    public virtual int UserRoleId { get; set; } // delete
    public virtual UserRole UserRole { get; set; }
    public virtual Operator Operator { get; set; }
}
我的数据库表是:

USER_OPERATOR_MEMBERSHIP_ID -- OPERATOR_ID -- USER_ROLE_ID
任何帮助都是好的,我相信有一些非常聪明、流利的nhibernate开发人员可以直接发现错误

非常感谢


Randolf.

您正在映射引用的实体和外键:

public OperatorMembershipMap()
{
    Table("USER_OPERATOR_MEMBERSHIP");
    Id(x => x.Id, "USER_OPERATOR_MEMBERSHIP_ID").GeneratedBy.Identity();
    // Map(x => x.OperatorId, "OPERATOR_ID");
    // Map(x => x.UserRoleId, "USER_ROLE_ID");

    References(x => x.Operator).Column("OPERATOR_ID"); ;
    References(x => x.UserRole).Column("USER_ROLE_ID");
}
您还可以从实体中删除外键:

public class OperatorMembership
{
    public virtual int Id { get; set; }
    // public virtual int OperatorId { get; set; } // delete
    // public virtual int UserRoleId { get; set; } // delete
    public virtual UserRole UserRole { get; set; }
    public virtual Operator Operator { get; set; }
}

我也遇到了同样的问题,最后在谷歌上搜索了半天,但没有成功。马修给出的上述答案似乎是相关的,我也尝试了同样的答案,但对我来说不起作用。然后我尝试删除引用并保持属性的完整性,这对我很有效,希望也能对您有效

    Table("USER_OPERATOR_MEMBERSHIP");
    Id(x => x.Id, "USER_OPERATOR_MEMBERSHIP_ID").GeneratedBy.Identity();
    Map(x => x.OperatorId, "OPERATOR_ID");
    Map(x => x.UserRoleId, "USER_ROLE_ID");

    //References(x => x.Operator).Column("OPERATOR_ID"); ;
    //References(x => x.UserRole).Column("USER_ROLE_ID");
也将其从类中删除

public class OperatorMembership
{
     public virtual int Id { get; set; }
     public virtual int OperatorId { get; set; } // delete
     public virtual int UserRoleId { get; set; } // delete
     //public virtual UserRole UserRole { get; set; }
     //public virtual Operator Operator { get; set; }
}

如果删除属性,则无法使用代码访问这些属性,以便使用以下值进行更新:op.OperatorId=OperatorId;op.UserRoleId=UserRoleId;您可以使用op.Operator=session.Load(operatorId)嗨,mathieu,我如何保存新的operatormembership行?如果我没有这两个属性,那么我将无法保存,operatormembership表是operator和userrole的查找表。您不必映射关系表:Cheers Mate,您是对的,我只是不需要映射列,但仍然将它们保留在类实体中,这很有效。
    Table("USER_OPERATOR_MEMBERSHIP");
    Id(x => x.Id, "USER_OPERATOR_MEMBERSHIP_ID").GeneratedBy.Identity();
    Map(x => x.OperatorId, "OPERATOR_ID");
    Map(x => x.UserRoleId, "USER_ROLE_ID");

    //References(x => x.Operator).Column("OPERATOR_ID"); ;
    //References(x => x.UserRole).Column("USER_ROLE_ID");
public class OperatorMembership
{
     public virtual int Id { get; set; }
     public virtual int OperatorId { get; set; } // delete
     public virtual int UserRoleId { get; set; } // delete
     //public virtual UserRole UserRole { get; set; }
     //public virtual Operator Operator { get; set; }
}