サブソニック3-シンプルなリポジトリと外部キーの作成
-
08-10-2019 - |
質問
そこにはほとんど例がないようですので、ここに行きます:
ここに私の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を提供してください。
所属していません StackOverflow