本文整理汇总了C#中IExpressionNode.AddBackwardEdge方法的典型用法代码示例。如果您正苦于以下问题:C# IExpressionNode.AddBackwardEdge方法的具体用法?C# IExpressionNode.AddBackwardEdge怎么用?C# IExpressionNode.AddBackwardEdge使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IExpressionNode
的用法示例。
在下文中一共展示了IExpressionNode.AddBackwardEdge方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UpdateLowerLevels
//.........这里部分代码省略.........
int levelDistance = myCurrentLevelKey.Level - aLowerLevelKey.Level;
//VertexType currentType = null;
EdgeKey myCurrentBackwardEdgekey = null;
IAttributeDefinition currentAttribute = null;
#endregion
if (levelDistance >= 1)
{
if (myCurrentLevelKey.Level > 1)
{
myCurrentBackwardEdgekey = myCurrentLevelKey.Edges[myCurrentLevelKey.Level - 1];
}
else
{
myCurrentBackwardEdgekey = myCurrentLevelKey.Edges[0];
}
}
else
{
throw new ExpressionGraphInternalException("Distances below 1 are not valid.");
}
IEnumerable<IVertex> referencedUUIDs = null;
IVertexType tempVertexType = _iGraphDB.GetVertexType<IVertexType>(
_securityToken,
_transactionToken,
new RequestGetVertexType(myCurrentBackwardEdgekey.VertexTypeID),
(stats, vertexType) => vertexType);
currentAttribute = tempVertexType.GetAttributeDefinition(myCurrentBackwardEdgekey.AttributeID);
if (currentAttribute.Kind == AttributeType.IncomingEdge)
{
var incomingAttribite = (IIncomingEdgeDefinition)currentAttribute;
var IVertex = myNode.GetIVertex();
if (IVertex.HasOutgoingEdge(incomingAttribite.RelatedEdgeDefinition.ID))
{
referencedUUIDs = IVertex.GetOutgoingEdge(incomingAttribite.RelatedEdgeDefinition.ID).GetTargetVertices();
}
}
else
{
var outgoingAttribute = (IOutgoingEdgeDefinition)currentAttribute;
if (myNode.BackwardEdges.ContainsKey(aLowerLevelKey.LastEdge))
{
//take the edges that are already available
List<IVertex> tempVertices = new List<IVertex>();
foreach (var aVertexInformation in myNode.BackwardEdges[aLowerLevelKey.LastEdge].Select(item => item.Destination))
{
tempVertices.Add(_iGraphDB.GetVertex<IVertex>(
_securityToken,
_transactionToken,
new RequestGetVertex(aVertexInformation.VertexTypeID, aVertexInformation.VertexID),
(stats, vertices) => vertices));
}
referencedUUIDs = tempVertices;
}
else
{
var aVertex = myNode.GetIVertex();
if (aVertex.HasIncomingVertices(myCurrentBackwardEdgekey.VertexTypeID, myCurrentBackwardEdgekey.AttributeID))
{
referencedUUIDs = aVertex.GetIncomingVertices(myCurrentBackwardEdgekey.VertexTypeID, myCurrentBackwardEdgekey.AttributeID);
}
}
}
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];
}
foreach (var aVertex in referencedUUIDs)
{
AddNodeRecursiveBackward(aVertex, myNode.VertexInformation, myCurrentLevelKey, aLowerLevelKey, lowerLevelKeys, myGraph);
myNode.AddBackwardEdge(edgeKeyForBackwardEdge, GenerateVertexInfoFromLevelKeyAndVertexID(aVertex.VertexTypeID, aVertex.VertexID), null);
}
}
}
}
}
}
示例2: UpdateLowerLevels
//.........这里部分代码省略.........
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)
{
referencedDBObject = _DBObjectCache.LoadDBObjectStream(referencedType, aReferenceObjectUUID);
if (!referencedDBObject.Success())
{
#region error
if (invalidReferenceSetting == null)
{
invalidReferenceSetting = (SettingInvalidReferenceHandling)_DBContext.DBSettingsManager.GetSetting(SettingInvalidReferenceHandling.UUID, _DBContext, Enums.TypesSettingScope.ATTRIBUTE, referencedType, currentAttribute).Value;
}
switch (invalidReferenceSetting.Behaviour)
{
case BehaviourOnInvalidReference.ignore:
#region ignore
//set lower levelKeys to null because it is not possible to go any lower
AddNodeRecursiveBackward(aReferenceObjectUUID, myNode.GetObjectUUID(), myCurrentLevelKey, aLowerLevelKey, null, myGraph);
myNode.AddBackwardEdge(edgeKeyForBackwardEdge, aReferenceObjectUUID, null);
#endregion
break;
case BehaviourOnInvalidReference.log:
AddWarning(new Warning_EdgeToNonExistingNode(myNode.GetDBObjectStream(_DBObjectCache, referencedType.UUID), currentAttribute.GetDBType(_DBContext.DBTypeManager), currentAttribute, referencedDBObject.IErrors));
break;
default:
throw new GraphDBException(new Error_NotImplemented(new System.Diagnostics.StackTrace()));
}
#endregion
}
else
{
AddNodeRecursiveBackward(aReferenceObjectUUID, myNode.GetObjectUUID(), myCurrentLevelKey, aLowerLevelKey, lowerLevelKeys, myGraph);
myNode.AddBackwardEdge(edgeKeyForBackwardEdge, aReferenceObjectUUID, null);
}
}
}
}
}
}
}