Question

Il semble y avoir guère d'exemple là-bas va donc ici:

Voici mes trois structures, mais il ne semble pas créer les tables correctement et quand je l'appelle la ligne suivante, il dit Id ne reconnaît pas:

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

}

Autorisation:

public class Permission
    {

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

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

    }

Rôle:

public class Role
    {

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

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

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

    }
Était-ce utile?

La solution

Je ne sais pas si cela a été corrigé dans une version actuelle, mais je me souviens d'un bug idiot dans la détection de subsoniques de clé primaire.

  • Si votre objet contient une propriété nommée Id subsonique suppose que est votre clé primaire.
  • Si vous avez à dire subsonique est votre PK en décorant une propriété avec l'attribut SubSonicPrimaryKey (comme vous l'avez fait).
  • Si vous avez une propriété appelée Id et est également décorée avec l'attribut (comme votre rôle et la classe Permission) trouve subsoniques la propriété de deux fois et ne vérifie pas si les deux égaux. Ensuite, il lance une exception, car il ne peut pas déterminer avec certitude lequel prendre.

Longue histoire courte, vous devriez essayer:

a) Supprimez l'attribut de votre colonne Id

b) Renommer la propriété à RoleId ou PermissionId (qui serait plus consistend parce que votre classe RolePermission a PK il a appelé RolePermissionId)

Si cela ne veut pas de l'aide, s'il vous plaît fournir un stacktrace.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top