Ayuda para configurar asociaciones en Castle Active Record en caso de tabla de asociación

Tengo mesas como

Usuarios (ID de usuario, nombre de usuario, contraseña, CreatedOn, CreatedBy)

Roles (RoleId, RoleName, Descripción, CreatedOn, CreatedBy)

UserRoleMap (UserRoleMapId, UserId, RoleId, CreatedOn, CreatedBy)

Estas son mis entidades:

[ActiveRecord(Table="Users")]
public class User:ActiveRecordBase<User>
{
    [PrimaryKey(Generator = PrimaryKeyType.Identity, Column = "RoleId")]
    public virtual int UserId { get; set; }

    [Property(Column="Username")]
    public virtual string Username { get; set; }

    [Property(Column = "Password")]
    public virtual string  Password { get; set; }

    [Property(Column="CreatedBy")]
    public virtual string CreatedBy { get; set; }

    [Property(Column="CreatedOn")]
    public virtual DateTime CreatedOn { get; set; }

    [HasAndBelongsToMany(Table="UserRoleMap",ColumnKey="UserId")]
    public IList<Role> Roles { get; set; }

}
[ActiveRecord(Table = "Roles")]
public class Role : ActiveRecordBase<User>
{
    [PrimaryKey(Generator = PrimaryKeyType.Identity, Column = "RoleId")]
    public virtual int RoleId { get; set; }

    [Property(Column = "RoleName")]
    public virtual string RoleName { get; set; }

    [Property(Column = "Description")]
    public virtual string Description { get; set; }

    [Property(Column = "CreatedBy")]
    public virtual string CreatedBy { get; set; }

    [Property(Column = "CreatedOn")]
    public virtual DateTime CreatedOn { get; set; }

    [HasAndBelongsToMany(Table = "UserRoleMap", ColumnKey = "RoleId")]
    public IList<User> Users { get; set; }
}

[ActiveRecord(Table="UserRoleMap")]
public class UserRoleMap:ActiveRecordBase<UserRoleMap>
{
    [PrimaryKey(Generator = PrimaryKeyType.Identity, Column = "UserRoleMapId")]
    public virtual int UserRoleMapId { get; set; }

    [BelongsTo(Column="UserId",Table="Users")]
    public virtual User UserId { get; set; }

    [BelongsTo(Column = "RoleId", Table = "Roles")]
    public virtual Role RoleId { get; set; }

}

Sigo recibiendo este error: ActiveRecordSample.Tests.FrameworkInitializationTest.CanInitializaFramework: Castle.ActiveRecord.Framework.ActiveRecordException: Property UserId hace referencia a la tabla "Users", que no tiene un [JoinedTable] correspondiente en la clase.

preguntado el 16 de mayo de 11 a las 18:05

1 Respuestas

  • Siempre que el nombre de la columna coincida con el nombre de la propiedad, no es necesario establecer Column = "..."
  • User.UserId se asigna a la columna "RoleId", debería ser "UserId" (o como dije en el punto anterior, simplemente no lo defina)
  • Asegúrese de comprender el pros y contras de cada generador de PK.
  • Cuando usa HasAndBelongsToMany, no desea una clase de relación separada (en su caso, UserRoleMap).
  • IIRC también necesita definir el otro FK en HasAndBelongsToMany con ColumnRef.

contestado el 17 de mayo de 11 a las 02:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.