亚音速3-简单存储库并创建外键
-
08-10-2019 - |
题
似乎几乎没有任何例子,所以这里是:
这是我的三个结构,但似乎无法正确创建表,当我调用以下行时,它说ID未被识别:
IEnumerable<Permission> permissions = _data.Find<RolePermission>(x => x.Role.RoleKey == roleKey).Select(x => x.Permission);
Rolepermession:
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; }
}
解决方案
我不知道当前版本中是否已解决此问题,但我记得在亚音速键检测中有一个愚蠢的错误。
- 如果您的对象包含一个名为ID的属性,则假设是您的主要密钥。
- 如果没有
SubSonicPrimaryKey
属性(就像您一样)。 - 如果您有一个称为ID的属性,并且还用属性(例如您的角色和权限类)进行了装饰,则可以将亚音速索引两次找到该属性,并且不会检查它们是否同等。然后它会引发异常,因为它无法可靠地确定要服用哪个。
长话短说,您应该尝试:
a)从ID列中删除属性
b)将属性重命名为releid或许可ID(这将更加一致,因为您的Rolepermessions类具有称为Rolepermession ID的PK)
如果那无济于事,请提供堆栈。
不隶属于 StackOverflow