Beispiel #1
0
        public override Guid GetScalarObjectPropValue(XStorageConnection con, IXObjectIdentity xobj_id, string sOPath)
        {
            XStorageObjectToSave xobj;
            object vPropValue;                                  // значение свойства
            Guid   oid_cur         = xobj_id.ObjectID;
            string sObjectType_cur = xobj_id.ObjectType;

            string[] aPathParts = sOPath.Split('.');
            bool     bLoad;

            for (int i = 0; i < aPathParts.Length; ++i)
            {
                xobj  = m_datagram.GetObjectToSave(sObjectType_cur, oid_cur);
                bLoad = false;
                if (xobj == null)
                {
                    // объекта нет в датаграмме, зачитаем из БД его и все последующие
                    bLoad = true;
                }
                else
                {
                    string sPropName = aPathParts[i];
                    if (sPropName == "ObjectID")
                    {
                        oid_cur = xobj.ObjectID;
                    }
                    else if (xobj.Props.Contains(sPropName))
                    {
                        vPropValue = xobj.Props[sPropName];
                        if (vPropValue == null)
                        {
                            return(Guid.Empty);
                        }
                        oid_cur         = (Guid)vPropValue;
                        sObjectType_cur = getObjectValueTypeName(sObjectType_cur, sPropName, con);
                    }
                    else
                    {
                        // объект есть в датаграмме, но свойства нет - зачитаем его из БД и все последующие
                        bLoad = true;
                    }
                }
                if (bLoad)
                {
                    return(GetScalarObjectPropValueFromDB(con, sObjectType_cur, oid_cur, aPathParts, i));
                }
            }
            return(oid_cur);
        }
Beispiel #2
0
        /// <summary>
        /// Параметр делегата CreateCacheValue - вызывает при отсутствии запрощенного объекта в кэше
        /// </summary>
        /// <param name="key">ключ в кэше - реализация IXObjectIdentity (XObjectIdentity или наследники XObjectBase)</param>
        /// <param name="param">экземпляр XStorageConnection</param>
        /// <returns>Данные запрошенного объекта - экземпляр DomainObjectData</returns>
        private static object loadObject(object key, object param)
        {
            Debug.Assert(key != null);
            Debug.Assert(param != null);
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }

            IXObjectIdentity    obj_id  = (IXObjectIdentity)key;
            XStorageConnection  con     = (XStorageConnection)param;
            DomainObjectDataSet dataSet = new DomainObjectDataSet(con.MetadataManager.XModel);

            return(dataSet.Load(con, obj_id.ObjectType, obj_id.ObjectID));
        }
Beispiel #3
0
 public virtual Guid GetScalarObjectPropValue(XStorageConnection con, IXObjectIdentity xobj_id, string sOPath)
 {
     string[] aPathParts = sOPath.Split('.');
     return(GetScalarObjectPropValueFromDB(con, xobj_id.ObjectType, xobj_id.ObjectID, aPathParts, 0));
 }
Beispiel #4
0
 /// <summary>
 /// Удаляет закэшированные данные объекта
 /// </summary>
 public static void ResetObject(IXObjectIdentity obj_id)
 {
     m_instance.m_registry.ResetValue(obj_id);
 }
Beispiel #5
0
 /// <summary>
 /// Удаление одного объекта
 /// </summary>
 /// <param name="xs">XStorage</param>
 /// <param name="xobj">Удаляемый объект</param>
 /// <returns>Количество удаленных объектов</returns>
 public int Delete(XStorageConnection xs, IXObjectIdentity xobj)
 {
     return(Delete(xs, new IXObjectIdentity[] { xobj }));
 }