/// <summary> /// 对于文档中刚加入的元素,还没有加入它对应的连接。 /// 此方法会添加这些连接。 /// </summary> /// <param name="document"></param> private static void TryAddConnectionElements(AddToDocumentArgs args) { var document = args.Docment; var docTypeList = document.EntityTypes .Select(et => args.AllTypes.First(e => e.FullName == et.FullName)) .ToArray(); foreach (var type in docTypeList) { //添加继承连接线 var baseType = type.BaseType; if (docTypeList.Contains(baseType)) { var connectionEl = new ConnectionElement(type.FullName, baseType.FullName); connectionEl.ConnectionType = ConnectionType.Inheritance; TryAddConnection(document, connectionEl); } //添加引用连接线 foreach (var reference in type.References) { switch (reference.ReferenceType) { case ReferenceType.Normal: //如果被引用的实体也在被选择的列表中,则尝试生成相应的连接。 if (docTypeList.Contains(reference.RefEntityType)) { var connectionEl = new ConnectionElement(type.FullName, reference.RefEntityType.FullName); connectionEl.ConnectionType = reference.Nullable ? ConnectionType.NullableReference : ConnectionType.Reference; connectionEl.Label = reference.EntityProperty ?? reference.IdProperty; TryAddConnection(document, connectionEl); } break; //暂时忽略 //case ReferenceType.Parent: // break; //case ReferenceType.Child: // break; default: break; } } //添加组合连接线 foreach (var child in type.Children) { if (docTypeList.Contains(child.ChildEntityType)) { var connectionEl = new ConnectionElement(child.ChildEntityType.FullName, type.FullName); connectionEl.ConnectionType = ConnectionType.Composition; connectionEl.Label = child.Name; TryAddConnection(document, connectionEl); } } } }
/// <summary> /// 添加指定元素到文档中。 /// </summary> /// <param name="args"></param> public static void AddToDocument(AddToDocumentArgs args) { AddTypeElements(args.Docment, args.TypeList); TryAddConnectionElements(args); }