protected virtual int GetNextId()
 {
     if (TrackMapInfos.Count == 0)
     {
         return(1);
     }
     else
     {
         return(TrackMapInfos.Max(t => t.Id) + 1);
     }
 }
        protected virtual TrackMapInfo SaveTrackMapInfo(TrackMapInfo trackMapInfo)
        {
            var existing = GetTrackMapInfo(trackMapInfo.Id);

            if (existing != null)
            {
                DeleteTrackMapInfo(existing);
            }
            else
            {
                if (trackMapInfo.Id <= 0)
                {
                    trackMapInfo.Id = GetNextId();
                }
            }

            TrackMapInfos.Add(trackMapInfo);

            return(trackMapInfo);
        }
        protected virtual bool DeleteTrackMapInfo(TrackMapInfo trackMapInfo)
        {
            TrackMapInfos.Remove(trackMapInfo);

            return(true);
        }
 protected virtual TrackMapInfo GetTrackMapInfo(int id)
 {
     return(TrackMapInfos.FirstOrDefault(t => t.Id == id));
 }
 protected virtual TrackMapInfo GetTrackMapInfo(string trackName)
 {
     return(TrackMapInfos.FirstOrDefault(t => t.TrackName == trackName));
 }
 protected virtual IList <TrackMapInfo> GetTrackMapInfos()
 {
     return(TrackMapInfos.ToList());
 }