2

那里似乎几乎没有任何例子,所以这里是:

这是我的三个结构,但它似乎没有正确创建表,当我调用以下行时,它说 Id 未被识别:

IEnumerable<Permission> permissions = _data.Find<RolePermission>(x => x.Role.RoleKey == roleKey).Select(x => x.Permission);

角色权限:

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

    }
4

1 回答 1

1

我不知道这是否已在当前版本中得到修复,但我记得 subsonic 的主键检测中有一个愚蠢的错误。

  • 如果您的 Object 包含名为 Id subsonic 的属性,则假定这是您的主键。
  • 如果不是,您必须通过使用属性装饰属性来告诉亚音速是您的 PK SubSonicPrimaryKey(就像您所做的那样)。
  • 如果您有一个名为 Id 的属性,并且它也用属性(如您的 Role 和 Permission 类)装饰,则 subsonic 会两次找到该属性并且不检查它们是否相等。然后它抛出一个异常,因为它不能可靠地确定要采用哪一个。

长话短说,您应该尝试:

a)从您的 Id 列中删除属性

b)将属性重命名为 RoleId 或 PermissionId(这会更一致,因为您的 RolePermission 类有它的 PK 称为 RolePermissionId)

如果这没有帮助,请提供堆栈跟踪。

于 2010-11-25T11:30:07.503 回答