private static Camera GetCamera(CameraDto cameraDto) { // Determine the camera type with reflection: Type cameraType = Assembly .GetAssembly(typeof(Camera)) .GetTypes() .FirstOrDefault(type => type.Name.ToLower() == (cameraDto.Type + "Camera").ToLower()); // All the needed code to create 'CameraDslr' or 'CameraMirrorless' if we use AutoMapper: // Object cameraObject = Mapper.Map(cameraDto, cameraDto.GetType(), cameraType); // return cameraObject as Camera; Camera cameraEntity = new Camera(); if (cameraType?.Name.ToLower() == "dslrcamera") { cameraEntity = new DSLRCamera() { Make = cameraDto.Make, Model = cameraDto.Model, IsFullFrame = cameraDto.IsFullFrame, MinISO = cameraDto.MinISO, MaxISO = cameraDto.MaxISO, MaxShutterSpeed = cameraDto.MaxShutterSpeed }; } else if (cameraType?.Name.ToLower() == "mirrorlesscamera") { cameraEntity = new MirrorlessCamera() { Make = cameraDto.Make, Model = cameraDto.Model, IsFullFrame = cameraDto.IsFullFrame, MinISO = cameraDto.MinISO, MaxISO = cameraDto.MaxISO, MaxVideoResolution = cameraDto.MaxVideoResolution, MaxFrameRate = cameraDto.MaxFrameRate }; } return(cameraEntity); }
private static void ImportCameras(UnitOfWork unit) { var json = File.ReadAllText(String.Format(datasetsPath, "cameras")); var camerasDtos = JsonConvert.DeserializeObject <IEnumerable <CameraDTO> >(json); foreach (var cameraDto in camerasDtos) { if (cameraDto.Type == null || cameraDto.Make == null || cameraDto.Model == null || cameraDto.MinISO == null) { Console.WriteLine("Error. Invalid data provided"); continue; } if (cameraDto.Type == "DSLR") { Camera camera = new DSLRCamera { IsFullFrame = cameraDto.IsFullFrame, Make = cameraDto.Make, MaxISO = cameraDto.MaxISO, MaxShutterSpeed = cameraDto.MaxShutterSpeed, MinISO = cameraDto.MinISO, Model = cameraDto.Model }; unit.Cameras.Add(camera); try { unit.Commit(); Console.WriteLine($"Successfully imported {cameraDto.Type} {cameraDto.Make} {cameraDto.Model}"); } catch (DbEntityValidationException dbex) { unit.Cameras.Delete(camera); Console.WriteLine("Error. Invalid data provided"); } } else if (cameraDto.Type == "Mirrorless") { Camera camera = new MirrorlessCamera { IsFullFrame = cameraDto.IsFullFrame, Make = cameraDto.Make, MaxFrameRate = cameraDto.MaxFrameRate, MaxVideoResolution = cameraDto.MaxVideoResolution, MaxISO = cameraDto.MaxISO, MinISO = cameraDto.MinISO, Model = cameraDto.Model }; unit.Cameras.Add(camera); try { unit.Commit(); Console.WriteLine($"Successfully imported {cameraDto.Type} {cameraDto.Make} {cameraDto.Model}"); } catch (Exception) { unit.Cameras.Delete(camera); Console.WriteLine("Error. Invalid data provided"); } } } }