Pregunta

Parece que hay apenas ejemplos por ahí así que aquí va:

Aquí están mis tres estructuras, pero no parece crear las tablas correctamente y cuando llamo a la siguiente línea que dice Id no se reconoce:

IEnumerable<Permission> permissions = _data.Find<RolePermission>(x => x.Role.RoleKey == roleKey).Select(x => x.Permission);

RolePermission:

public class RolePermission
{

    [SubSonicPrimaryKey]
    public int RolePermissionId { get; set; }

    public int RoleId { get; set; }
    public int PermissionId { get; set; }

    //Foreign Key of Role
    public Role Role { get; set; }

    //Foreign key of Permission
    public Permission Permission { get; set; }

}

Permiso:

public class Permission
    {

        [SubSonicPrimaryKey]
        public int Id { get; set; }
        [SubSonicLongString]

        public string PermissionKey { get; set; }
        [SubSonicLongString]
        public string PermissionDescription { get; set; }

    }

Función:

public class Role
    {

        [SubSonicPrimaryKey]
        public int Id { get; set; }

        [SubSonicLongString]
        public string RoleKey { get; set; }

        [SubSonicLongString]
        public string RoleDescription { get; set; }

    }
¿Fue útil?

Solución

No sé si esto se ha solucionado en una versión actual pero recuerdo un error tonto en la detección de subsónicas clave principal.

  • Si el objeto contiene una propiedad denominada Id subsónica asume que es la clave principal.
  • Si no tienes que decirle a subsónica con PK es su decorando una propiedad con el atributo SubSonicPrimaryKey (como lo hizo).
  • Si usted tiene una propiedad llamada Id y también está decorado con el atributo (como su papel y Permiso clase) hallazgos subsónicas la propiedad dos veces y no comprueba si los dos iguales. Entonces se produce una excepción, ya que no se puede determinar con fiabilidad cuál tomar.

Para acortar una larga historia, usted debe tratar:

a) quitar el atributo de su columna Id

b) Cambiar el nombre de la propiedad para RoleId o PermissionId (lo que sería más consistend porque su clase RolePermission tiene su PK llama RolePermissionId)

Si eso no ayuda, por favor provea una StackTrace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top