Fluent nhibernate Fluent NHibernate映射帮助
我得到以下错误: 计数为3的此OracleParameterCollection的索引3无效 当我试图在表中插入新列时 我的实体类是: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
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; }
}