Ejemplo n.º 1
0
        /// <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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 添加指定元素到文档中。
        /// </summary>
        /// <param name="args"></param>
        public static void AddToDocument(AddToDocumentArgs args)
        {
            AddTypeElements(args.Docment, args.TypeList);

            TryAddConnectionElements(args);
        }
Ejemplo n.º 3
0
        /// <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);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 添加指定元素到文档中。
        /// </summary>
        /// <param name="args"></param>
        public static void AddToDocument(AddToDocumentArgs args)
        {
            AddTypeElements(args.Docment, args.TypeList);

            TryAddConnectionElements(args);
        }