public static Svc.Event ToServiceObject(this Event ev, IKeyMappingService mapping)
        {
            if (ev.CollectionEventID != null)
                throw new ArgumentException("Event already uploaded");

            var seriesID = (ev.SeriesID.HasValue) ? mapping.EnsureKey(DBObjectType.EventSeries, ev.SeriesID.Value) as int? : null;

            return new Svc.Event()
            {
                CollectionEventID = Int32.MinValue,
                CollectionSeriesID = seriesID,
                Altitude = ev.Altitude,
                CollectionDate = ev.CollectionDate,
                HabitatDescription = ev.HabitatDescription,
                Latitude = ev.Latitude,
                LocalityDescription = ev.LocalityDescription,
                Longitude = ev.Longitude,
            };
        }
        public static Svc.IdentificationUnit ToServiceObject(this IdentificationUnit iu, IKeyMappingService mapping)
        {
            var specID = mapping.EnsureKey(DBObjectType.Specimen, iu.SpecimenID);

            var relUnitID = (iu.RelatedUnitID.HasValue) ? mapping.EnsureKey(DBObjectType.IdentificationUnit, iu.RelatedUnitID.Value) as int? : null;

            return new Svc.IdentificationUnit()
            {
                CollectionUnitID = Int32.MinValue,
                CollectionSpecimenID = specID,
                CollectionRelatedUnitID = relUnitID,
                Altitude = iu.Altitude,
                AnalysisDate = iu.AnalysisDate,
                IdentificationUri = iu.IdentificationUri,
                LastIdentificationCache = iu.WorkingName,
                Qualification = iu.Qualification,
                Latitude = iu.Latitude,
                Longitude = iu.Longitude,
                OnlyObserved = iu.OnlyObserved,
                RelationType = iu.RelationType,
                TaxonomicGroup = iu.TaxonomicGroup,
            };
        }
        public static Svc.MultimediaObject ToServiceObject(this MultimediaObject mmo, IKeyMappingService mapping)
        {
            var relID = mapping.EnsureKey(mmo.OwnerType, mmo.RelatedId);

            return new Svc.MultimediaObject()
            {
                MediaType = mmo.MediaType.ToServiceObject(),
                OwnerType = mmo.OwnerType.ToServiceObject(),
                RelatedCollectionID = relID,
                Uri = mmo.CollectionURI
            };
        }
        public static Svc.Specimen ToServiceObject(this Specimen spec, IKeyMappingService mapping)
        {
            var eventID = mapping.EnsureKey(DBObjectType.Event, spec.EventID);

            return new Svc.Specimen()
            {
                CollectionSpecimenID = Int32.MinValue,
                CollectionEventID = eventID,
                AccessionNumber = spec.AccessionNumber,
            };
        }