Example #1
0
        public static ViewModelToPersistenceModelPropertyNamesMaps Generate(
            Type viewModelType,
            PersistenceModelPropertiesDescription persistenceModelDescription)
        {
            var viewModelProps = viewModelType.GetProperties().Select(PropInfo.FromPropertyInfo).ToList();

            var simplePropsMap = viewModelProps.Intersect(persistenceModelDescription.SimpleProperties).ToDictionary(x => x.Name, x => x.Name);
            var joinedMap      = GetMapForSubproperty(viewModelProps, persistenceModelDescription.JoinedModels);
            var componentsMap  = GetMapForSubproperty(viewModelProps, persistenceModelDescription.ComponentProperties);

            var allProps = simplePropsMap
                           .Union(componentsMap)
                           .Union(joinedMap)
                           .ToDictionary(x => x.Key, x => x.Value);

            var missingInPersistenceModel = viewModelProps.Where(x => allProps.All(v => v.Key != x.Name)).ToList();

            if (missingInPersistenceModel.Count > 0)
            {
                var propNames = missingInPersistenceModel.Select(x => x.Name).ToArray();
                var message   = "Properties from view model not found in persistence model: " + string.Join(",", propNames);
                throw new ApplicationException(message);
            }

            return(new ViewModelToPersistenceModelPropertyNamesMaps(allProps));
        }
Example #2
0
 static ViewModelsReader()
 {
     // TODO: this could be handled by IoC container not class itself. But maybe it's beter to store this information in static fields? Think about.
     persistenceModelDescription    = PersistenceModelPropertiesDescriptionGenerator.GenerateDescription(typeof(TPersistenceModel));
     viewModelToPersistenceModelMap = ViewModelToPersistenceModelPropertyNamesMapsGenerator.Generate(
         typeof(TGridModel), persistenceModelDescription);
     projectionsList = ProjectionsGenerator.GenerateProjectionsList(viewModelToPersistenceModelMap);
 }
Example #3
0
        public static QueryOver <TPersistenceModel, TPersistenceModel> AddAlliasesForAllSubpropertiesInViewModel <TPersistenceModel>(
            this QueryOver <TPersistenceModel, TPersistenceModel> query, PersistenceModelPropertiesDescription modelDescription)
            where TPersistenceModel : IPersistenceModel
        {
            foreach (var joinedModel in modelDescription.JoinedModels)
            {
                query.UnderlyingCriteria.CreateAlias(joinedModel.Name, joinedModel.Name, JoinType.InnerJoin);
            }

            return(query);
        }