/// <summary>
        /// Gets config schemes object with given ID.
        /// </summary>
        /// <param name="schemeId">ID of scheme.</param>
        /// <returns>ConfigSchemes object.</returns>
        private DataModel.ConfigSchemes _GetConfigSchemeObject(Guid schemeId)
        {
            // Get full entity scheme name.
            string entitySet = ContextHelper.GetFullEntitySetName(this,
                                                                  SCHEMES_ENTITY_SET);

            // Create entity key.
            EntityKey key = new EntityKey(entitySet, SCHEMES_KEY,
                                          schemeId);

            DataModel.ConfigSchemes scheme = null;
            object entity = null;

            // Try to get object by key.
            if (TryGetObjectByKey(key, out entity))
            {
                scheme = entity as DataModel.ConfigSchemes;
            }

            if (scheme == null)
            {
                throw new DataException();
            }

            return(scheme);
        }
        private string _GetConfigScheme(Guid schemeId)
        {
            string entitySet = ContextHelper.GetFullEntitySetName(this,
                                                                  SCHEMES_ENTITY_SET);

            EntityKey key = new EntityKey(entitySet, SCHEMES_KEY,
                                          schemeId);

            string schemeXML = null;
            object entity    = null;

            if (TryGetObjectByKey(key, out entity))
            {
                DataModel.ConfigSchemes scheme = entity as DataModel.ConfigSchemes;
                if (scheme != null)
                {
                    schemeXML = scheme.Value;
                }
            }

            if (schemeXML == null)
            {
                throw new DataException();
            }

            return(schemeXML);
        }
        ///////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////

        /// <summary>
        /// Explicit initialization. Must be called on creating new project.
        /// </summary>
        public void PostInit(CapacitiesInfo capacitiesInfo,
                             OrderCustomPropertiesInfo orderCustomPropertiesInfo)
        {
            Debug.Assert(!_isInited); // init once

            // add scheme objects
            DataModel.ConfigSchemes scheme = DataModel.ConfigSchemes.CreateConfigSchemes(SCHEME_ID_CAPACITIES);
            scheme.Name  = SCHEME_NAME_CAPACITIES;
            scheme.Value = ConfigDataSerializer.SerializeCapacitiesInfo(capacitiesInfo);
            AddObject(SCHEMES_ENTITY_SET, scheme);

            scheme       = DataModel.ConfigSchemes.CreateConfigSchemes(SCHEME_ID_ORDERPROPERTIES);
            scheme.Name  = SCHEME_NAME_ORDERPROPERTIES;
            scheme.Value = ConfigDataSerializer.SerializeOrderCustomPropertiesInfo(orderCustomPropertiesInfo);
            AddObject(SCHEMES_ENTITY_SET, scheme);

            base.SaveChanges();

            // create object factory
            ObjectInitData initData = new ObjectInitData();

            initData.CapacitiesInfo            = capacitiesInfo;
            initData.OrderCustomPropertiesInfo = orderCustomPropertiesInfo;

            _fact        = new DataObjectFactory(initData);
            _objInitData = initData;

            // Attach handler for SavingChanges event.
            this.SavingChanges += new EventHandler(DataObjectContext_SavingChanges);
            _isInited           = true;
        }
        /// <summary>
        /// Updates order custom properties info in database.
        /// </summary>
        /// <param name="propertiesInfo">Order custom properrties info.</param>
        public void UpdateCustomOrderPropertiesInfo(OrderCustomPropertiesInfo propertiesInfo)
        {
            Debug.Assert(propertiesInfo != null);

            // Get custom order properties config scheme.
            DataModel.ConfigSchemes customOrderPropertiesScheme = _GetConfigSchemeObject(SCHEME_ID_ORDERPROPERTIES);

            // Update value of custom order properties database field.
            customOrderPropertiesScheme.Value =
                ConfigDataSerializer.SerializeOrderCustomPropertiesInfo(propertiesInfo);

            // Update init data.
            _objInitData.OrderCustomPropertiesInfo = propertiesInfo;

            // Save changes to the database.
            base.SaveChanges();
        }