public IPKSimProject MapFrom(ProjectMetaData projectMetaData) { var project = new PKSimProject { Name = projectMetaData.Name, Description = projectMetaData.Description }; //Observed data needs to be loaded first into project projectMetaData.AllObservedData.Each(x => project.AddObservedData(mapFrom(x))); projectMetaData.BuildingBlocks.Each(x => project.AddBuildingBlock(mapFrom(x))); //we need a shared context for all object referencing observed data and simulations using (var context = _serializationContextFactory.Create(project.AllObservedData, project.All <ISimulation>())) { var localContext = context; projectMetaData.ParameterIdentifications.Each(x => project.AddParameterIdentification(mapFrom(x, localContext))); projectMetaData.SensitivityAnalyses.Each(x => project.AddSensitivityAnalysis(mapFrom(x, localContext))); } projectMetaData.SimulationComparisons.Each(x => project.AddSimulationComparison(mapFrom(x))); //Once reference to dynamic meta data was added, deserialize the project itself _serializationManager.Deserialize(project, projectMetaData.Content.Data); //if the project DB Version is the same as the current project, the project did not change if (projectMetaData.Version == ProjectVersions.Current) { project.HasChanged = false; } return(project); }