2010-06-19 116 views
0

我正在使用单轨/ activerecord,并且想知道如何处理多对多关系中的添加项目,当多对多表中除了2个外键之外还有一个值。Castle ActiveRecord HasAndBelongsToMany问题

例如,商业和娱乐类有多对多的关系,所以有一个商业满意度表。如果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类有另一列所谓的“价值”,需要为每个协会设置?您不能再向Business.Amenities添加Amenity对象,因为您需要能够在BusinessAmenity中设置Value属性。

有人可以提供一些洞察你如何在ActiveRecord中做到这一点?

谢谢! 贾斯汀

回答

2

地图的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;} 
} 

这一问题已经在计算器讨论过很多次: