【问题标题】:Help Configuring Associations in Castle Active Record in case of association table帮助在Castle Active Record中配置关联表以防关联表
【发布时间】:2011-08-26 15:57:52
【问题描述】:

我有类似的桌子

用户(UserId、用户名、密码、CreatedOn、CreatedBy)

角色(RoleId、RoleName、Description、CreatedOn、CreatedBy)

UserRoleMap(UserRoleMapId,UserId,RoleId,CreatedOn,CreatedBy)

这些是我的实体:

[ActiveRecord(Table="Users")]
public class User:ActiveRecordBase<User>
{
    [PrimaryKey(Generator = PrimaryKeyType.Identity, Column = "RoleId")]
    public virtual int UserId { get; set; }

    [Property(Column="Username")]
    public virtual string Username { get; set; }

    [Property(Column = "Password")]
    public virtual string  Password { get; set; }

    [Property(Column="CreatedBy")]
    public virtual string CreatedBy { get; set; }

    [Property(Column="CreatedOn")]
    public virtual DateTime CreatedOn { get; set; }

    [HasAndBelongsToMany(Table="UserRoleMap",ColumnKey="UserId")]
    public IList<Role> Roles { get; set; }

}
[ActiveRecord(Table = "Roles")]
public class Role : ActiveRecordBase<User>
{
    [PrimaryKey(Generator = PrimaryKeyType.Identity, Column = "RoleId")]
    public virtual int RoleId { get; set; }

    [Property(Column = "RoleName")]
    public virtual string RoleName { get; set; }

    [Property(Column = "Description")]
    public virtual string Description { get; set; }

    [Property(Column = "CreatedBy")]
    public virtual string CreatedBy { get; set; }

    [Property(Column = "CreatedOn")]
    public virtual DateTime CreatedOn { get; set; }

    [HasAndBelongsToMany(Table = "UserRoleMap", ColumnKey = "RoleId")]
    public IList<User> Users { get; set; }
}

[ActiveRecord(Table="UserRoleMap")]
public class UserRoleMap:ActiveRecordBase<UserRoleMap>
{
    [PrimaryKey(Generator = PrimaryKeyType.Identity, Column = "UserRoleMapId")]
    public virtual int UserRoleMapId { get; set; }

    [BelongsTo(Column="UserId",Table="Users")]
    public virtual User UserId { get; set; }

    [BelongsTo(Column = "RoleId", Table = "Roles")]
    public virtual Role RoleId { get; set; }

}

我不断收到此错误: ActiveRecordSample.Tests.FrameworkInitializationTest.CanInitializaFramework : Castle.ActiveRecord.Framework.ActiveRecordException : 属性 UserId 引用表“Users”,该表在类上没有对应的 [JoinedTable]。

【问题讨论】:

    标签: many-to-many castle-activerecord xunit.net


    【解决方案1】:
    • 只要列名与属性名匹配,就不需要设置 Column="..."
    • User.UserId 映射到“RoleId”列,应该是“UserId”(或者我上面说的,不要定义)
    • 请务必了解pros and cons of each PK generator
    • 使用 HasAndBelongsToMany 时,您不需要单独的关系类(在您的情况下为 UserRoleMap)。
    • IIRC 您还需要使用 ColumnRef 在 HasAndBelongsToMany 中定义其他 FK。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2013-12-25
      • 2017-10-14
      • 2014-12-06
      相关资源
      最近更新 更多