2011-05-27 5 views
0

Je reçois l'erreur suivante:NHibernate Mapping Fluent aider

index non valide 3 pour cette OracleParameterCollection avec Count = 3

quand je tente d'insérer une nouvelle colonne dans une table.

ma classe d'entité est:

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; } 
} 

Mes applications sont:

public OperatorMap() 
    { 
     Table("OPERATOR"); 
     Id(x => x.Id, "OPERATOR_ID").GeneratedBy.Identity(); 
     Map(x => x.SchemeId, "SCHEME_ID"); 
     Map(x => x.Description, "DESCRIPTION"); 
     //HasMany(x => x.OperatorMemberships).Inverse().AsBag().Cascade.AllDeleteOrphan(); 
     HasMany(x => x.OperatorMemberships).Inverse().AsBag(); 
     //References(x => x.SchemeServices, "OPERATOR_ID"); 
    } 
} 

public class OperatorMembershipMap : ClassMap<OperatorMembership> 
{ 
    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"); 
    } 
} 

le code à insérer la nouvelle ligne est:

public int AddOperatorMembership(int operatorId, int userRoleId) 
    { 
     OperatorMembership op = new OperatorMembership(); 
     op.OperatorId = operatorId; 
     op.UserRoleId = userRoleId; 
     _provider.AddEntity(op); 

     return op.Id; 
    } 

et ma table de base de données est:

USER_OPERATOR_MEMBERSHIP_ID -- OPERATOR_ID -- USER_ROLE_ID 

toute aide serait bon, je suis sûr qu'il ya des développeurs de Fluent NHibernate très intelligent là-bas qui peuvent repérer l'erreur tout de suite.

merci beaucoup.

Randolf.

Répondre

1

Vous cartographiant les entités référencées et la clé étrangère:

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"); 
} 

Vous pouvez également supprimer les clés étrangères de votre entité:

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; } 
} 
+0

si je retire les propriétés alors je ne peux pas y accéder avec mon code pour une mise à jour avec ces valeurs: op.OperatorId = operatorId; op.UserRoleId = userRoleId; –

+0

Ok, mais alors vous aurez l'erreur dans votre question. – mathieu

+0

Et vous pouvez utiliser op.Operator = session.Load (operatorId) – mathieu

1

Moi aussi, je suis tombé sur la même question et a pris fin googling pendant une demi-journée, mais pas de succès. La réponse ci-dessus donnée par Mathieu semble pertinente et j'ai essayé la même chose mais n'a pas fonctionné pour moi. Ensuite, j'ai essayé de supprimer les références et de garder les propriétés intactes, cela a fonctionné pour moi et j'espère que cela fonctionnera pour vous aussi.

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

Retirez le même de la classe et

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; } 
}