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); }
/// <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)); }
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)); }
/// <summary> /// Удаляет закэшированные данные объекта /// </summary> public static void ResetObject(IXObjectIdentity obj_id) { m_instance.m_registry.ResetValue(obj_id); }
/// <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 })); }