【问题标题】:Castle ActiveRecord HasAndBelongsToMany issueCastle ActiveRecord HasAndBelongsToMany 问题
【发布时间】:2010-06-19 17:07:17
【问题描述】:

我正在使用 monorail/activerecord 并且想知道当多对多表中除了两个外键之外还有一个值时,您如何处理在多对多关系中添加项目。

例如,Business 和 Amenity 类具有多对多关系,因此有一个 BusinessAmenity 表。如果 BusinessAmenity 表只有外键 BusinessId 和 AmenityId,那么您可以这样做:

[HasAndBelongsToMany(typeof(Amenity),
          Table = "BusinessAmenity", ColumnKey = "businessid", ColumnRef = "amenityid", Cascade = ManyRelationCascadeEnum.None, Lazy=true)]
        public IList<Amenity> Amenities
        {
            get { return _amenities; }
            set { _amenities = value; }
        }

然后像这样添加关联:

business.Amenities.Add(amenity;

但是,如果 BusinessAmenity 类需要为每个关联设置另一个名为“Value”的列,该怎么办?您不能再将 Amenity 对象添加到 Business.Amenities,因为您需要能够在 BusinessAmenity 中设置 Value 属性。

有人可以提供一些关于您如何在 ActiveRecord 中执行此操作的见解吗?

谢谢! 贾斯汀

【问题讨论】:

    标签: nhibernate castle-activerecord


    【解决方案1】:

    将 BusinessAmenity 映射到它自己的 BusinessAmenity 类,例如(伪代码):

    [ActiveRecord]
    class Business {
        [PrimaryKey] int Id {get;set;}
        [HasMany] ISet<BusinessAmenity> Amenities {get;set;}
    }
    
    [ActiveRecord]    
    class Amenity {
        [PrimaryKey] int Id {get;set;}
        [HasMany] ISet<BusinessAmenity> Businesses {get;set;}
    }
    
    [ActiveRecord]    
    class BusinessAmenity {
        [BelongsTo] Amenity Amenity {get;set;}
        [BelongsTo] Business Business {get;set;}
        [Property] int Value {get;set;}
    }
    

    这个在stackoverflow上已经讨论过很多次了:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多