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

    }
È stato utile?

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
scroll top