Subsonic 3 - repository semplice e la creazione di una chiave esterna
-
08-10-2019 - |
Domanda
Sembra che ci sia quasi nessun esempi là fuori va ecco:
Ecco i miei tre strutture, ma non sembra creare le tabelle correttamente e quando chiamo la seguente riga che dice Id non viene riconosciuto:
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; }
}
Il permesso:
public class Permission
{
[SubSonicPrimaryKey]
public int Id { get; set; }
[SubSonicLongString]
public string PermissionKey { get; set; }
[SubSonicLongString]
public string PermissionDescription { get; set; }
}
Ruolo:
public class Role
{
[SubSonicPrimaryKey]
public int Id { get; set; }
[SubSonicLongString]
public string RoleKey { get; set; }
[SubSonicLongString]
public string RoleDescription { get; set; }
}
Soluzione
Non so se questo è stato risolto in una versione corrente, ma mi ricordo un bug stupido in di rilevamento subsonici chiave primaria.
- Se l'oggetto contiene una proprietà denominata Id subsonica presuppone che è la chiave primaria.
- Se non si deve dire subsonico con è il vostro PK decorando una proprietà con l'attributo
SubSonicPrimaryKey
(come hai fatto). - Se si dispone di una proprietà chiamata Id ed è decorato con l'attributo (come il vostro ruolo e il permesso di classe) reperti subsoniche la proprietà due volte e non verifica se entrambi pari. Poi viene generata un'eccezione, perché non è in grado di determinare in modo affidabile quale prendere.
Per farla breve, si dovrebbe provare:
a) Rimuovere l'attributo da colonna Id
b) Rinominare la proprietà ID ruolo o PermissionId (che sarebbe più consistend perché la classe RolePermission ha il PK chiamato RolePermissionId)
Se questo non risolve il problema, si prega di fornire uno stacktrace.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow