本文整理汇总了C#中IExpressionNode.GetDBObjectStream方法的典型用法代码示例。如果您正苦于以下问题:C# IExpressionNode.GetDBObjectStream方法的具体用法?C# IExpressionNode.GetDBObjectStream怎么用?C# IExpressionNode.GetDBObjectStream使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IExpressionNode
的用法示例。
在下文中一共展示了IExpressionNode.GetDBObjectStream方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UpdateLowerLevels
private void UpdateLowerLevels(IExpressionNode myNode, LevelKey myCurrentLevelKey, IEnumerable<LevelKey> myLowerLevelKeys, IExpressionGraph myGraph)
{
if (myCurrentLevelKey.Level > 0)
{
lock (myGraph)
{
//iterate the next lower LevelKeys
foreach (var aLowerLevelKey in myLowerLevelKeys)
{
#region data
//get next lower attribute (might be more than one step away)
int levelDistance = myCurrentLevelKey.Level - aLowerLevelKey.Level;
//GraphDBType currentType = null;
EdgeKey myCurrentBackwardEdgekey = null;
TypeAttribute currentAttribute = null;
SettingInvalidReferenceHandling invalidReferenceSetting = null;
#endregion
if (levelDistance >= 1)
{
if (myCurrentLevelKey.Level > 1)
{
myCurrentBackwardEdgekey = myCurrentLevelKey.Edges[myCurrentLevelKey.Level - 1];
}
else
{
myCurrentBackwardEdgekey = myCurrentLevelKey.Edges[0];
}
}
else
{
throw new GraphDBException(new Error_ExpressionGraphInternal(new System.Diagnostics.StackTrace(true), "Distances below 1 are not valid."));
}
IEnumerable<ObjectUUID> referencedUUIDs = null;
GraphDBType referencedType = null;
currentAttribute = _DBContext.DBTypeManager.GetTypeByUUID(myCurrentBackwardEdgekey.TypeUUID).GetTypeAttributeByUUID(myCurrentBackwardEdgekey.AttrUUID);
if (currentAttribute.IsBackwardEdge)
{
var backwardEdgeTypeInfo = currentAttribute.BackwardEdgeDefinition.GetTypeAndAttributeInformation(_DBContext.DBTypeManager);
var dbObjectStream = myNode.GetDBObjectStream(_DBObjectCache, backwardEdgeTypeInfo.Item1.UUID);
referencedType = backwardEdgeTypeInfo.Item2.GetDBType(_DBContext.DBTypeManager);
if (dbObjectStream.HasAttribute(backwardEdgeTypeInfo.Item2.UUID, backwardEdgeTypeInfo.Item1))
{
referencedUUIDs = GetUUIDsForAttribute(dbObjectStream, backwardEdgeTypeInfo.Item2, backwardEdgeTypeInfo.Item1);
}
}
else
{
referencedType = currentAttribute.GetRelatedType(_DBContext.DBTypeManager);
if (myNode.BackwardEdges.ContainsKey(aLowerLevelKey.LastEdge))
{
//take the edges that are already available
referencedUUIDs = myNode.BackwardEdges[aLowerLevelKey.LastEdge].Select(item => item.Destination);
}
else
{
//load the backward edge stream
var currentBackwardEdgeStream = _DBObjectCache.LoadDBBackwardEdgeStream(currentAttribute.GetDBType(_DBContext.DBTypeManager), myNode.GetObjectUUID());
if (currentBackwardEdgeStream.Failed())
{
throw new GraphDBException(new Error_CouldNotLoadBackwardEdge(myNode.GetDBObjectStream(_DBObjectCache, currentAttribute.GetRelatedType(_DBContext.DBTypeManager).UUID), currentAttribute, currentBackwardEdgeStream.IErrors));
}
if (currentBackwardEdgeStream.Value.ContainsBackwardEdge(myCurrentBackwardEdgekey))
{
referencedUUIDs = currentBackwardEdgeStream.Value.GetBackwardEdgeUUIDs(myCurrentBackwardEdgekey);
}
}
}
if (referencedUUIDs != null)
{
var lowerLevelKeys = ExtractLowerLevelKeys(GetPreviousLevel(aLowerLevelKey.Level, myGraph.Levels), aLowerLevelKey, myGraph);
EdgeKey edgeKeyForBackwardEdge = null;
//get edgeKey for backwardEdge
if (myCurrentLevelKey.Level == 1)
{
edgeKeyForBackwardEdge = aLowerLevelKey.LastEdge;
}
else
{
edgeKeyForBackwardEdge = aLowerLevelKey.Edges[aLowerLevelKey.Level - 1];
}
Exceptional<DBObjectStream> referencedDBObject = null;
foreach (var aReferenceObjectUUID in referencedUUIDs)
{
//.........这里部分代码省略.........