Замок ActiveRecord HasAndBelongsToMany проблема - PullRequest
0 голосов
/ 19 июня 2010

Я использую монорельс / 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В классе есть еще один столбец с именем «Значение», который необходимо установить для каждой ассоциации?Вы больше не можете добавлять объект Amenity в Business.Aferences, потому что вам нужно иметь возможность установить свойство Value в BusinessAmenity.

Может кто-нибудь дать представление о том, как вы делаете это в ActiveRecord?

Спасибо!Джастин

1 Ответ

2 голосов
/ 19 июня 2010

Сопоставьте 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:

...