Frage

Es scheint zu sein, kaum Beispiele gibt hier so geht:

Hier sind meine drei Strukturen, aber es scheint nicht die Tabellen richtig zu erstellen und wenn ich die folgende Zeile nennen, sagt sie Id nicht erkannt wird:

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

}

Permission:

public class Permission
    {

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

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

    }

Rolle:

public class Role
    {

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

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

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

    }
War es hilfreich?

Lösung

Ich weiß nicht, wenn dies in einer aktuellen Version behoben worden, aber ich erinnere mich einen dummen Fehler in Unterschall Primärschlüssel Erkennung.

  • Wenn Ihr Objekt eine Eigenschaft enthält namens Id Unterschall geht davon aus, dass Ihr Primärschlüssel.
  • Wenn Sie nicht Unterschall zu sagen haben mit Ihrem PK durch eine Eigenschaft mit dem SubSonicPrimaryKey Attribute Dekoration (wie Sie haben).
  • Wenn Sie eine Eigenschaft namens Id und es ist auch mit dem Attribut (wie Ihre Rolle und Berechtigungsklasse) Unterschall Funde Eigentum zweimal eingerichtet und beide Gleichen, wenn sie nicht überprüft. Dann wirft er eine Ausnahme, weil sie nicht zuverlässig bestimmen kann, welche zu nehmen.

Lange Rede kurzer Sinn, sollten Sie versuchen:

a) Entfernen Sie das Attribut aus Ihrer Id Spalte

b) Benennen Sie die Eigenschaft auf RoleId oder PermissionId (die mehr consistend sein würde, weil Ihre RolePermission Klasse es ist hat PK genannt RolePermissionId)

Wenn das nicht hilft, geben Sie bitte einen Stacktrace.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top