質問

そこにはほとんど例がないようですので、ここに行きます:

ここに私の3つの構造がありますが、テーブルを適切に作成していないようで、次の行を呼び出すと、IDは認識されていないと書かれています。

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

}

許可:

public class Permission
    {

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

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

    }

役割:

public class Role
    {

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

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

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

    }
役に立ちましたか?

解決

これが現在のリリースで修正されているかどうかはわかりませんが、Subsonicの主要なキー検出の愚かなバグを覚えています。

  • オブジェクトがID subsonicという名前のプロパティが含まれている場合、それがあなたの主キーであると仮定します。
  • そうでない場合は、subsonicがPKであることを伝えなければなりません。 SubSonicPrimaryKey 属性(あなたと同じように)。
  • IDと呼ばれるプロパティがあり、属性(役割や許可クラスなど)で装飾されている場合、Subsonicはプロパティを2回見つけ、両方が等しいかどうかを確認しません。次に、どれを取るべきかを確実に決定できないため、例外をスローします。

簡単に言えば、あなたは試してみるべきです:

a)ID列から属性を削除します

b)プロパティの名前をrolepermissionクラスにはrolepermissionIdと呼ばれるため、プロパティをrolepermissionクラスに持っているため、より一貫性があります)

それが役に立たない場合は、Stacktraceを提供してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top