Вопрос 1, я предлагаю такую структуру:
public class Album
{
public int AlbumId { get; set; }
/// <summary>
/// Readonly, foreach, public
/// </summary>
public IEnumerable<Track> Tracks
{
get { return TrackList; }
}
/// <summary>
/// Protected for repository/ORM
/// </summary>
protected IList<Track> TrackList { get; set; }
public void AddTrack(Track track)
{
//Here you can put additional logic
TrackList.Add(track);
}
public void RemoveTrack(Track track)
{
//Here you can put additional logic
TrackList.Remove(track);
}
}
public class Track
{
}
Напишите открытое свойство IEnumerable для дорожек, чтобы разрешить доступ только для чтения, и для циклов.
Защищенное свойство содержит дорожки и может использоваться ORM.
Напишите методы добавления и удаления треков в альбом. В эти методы вы можете поместить дополнительную логику.