Subsónica 3 - repositorio simple y la creación de una clave externa
-
08-10-2019 - |
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; }
}
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