Как отсортировать объекты DBML по алфавиту? - PullRequest
1 голос
/ 28 октября 2010

В моем проекте есть файл DBML со всеми моими объектами LinqToSql.Изначально я импортировал их из БД, и все было хорошо.Сейчас, когда моя БД растет, я добавляю новые диаграммы в диаграмму в O / R Designer, но они всегда добавляются в конец XML.Это немного мучительно, потому что когда я определяю внешние ключи, он всегда перечисляет доступные таблицы в порядке их появления в XML.

Любые идеи, как сортировать объявления таблиц XML по алфавитупо названию таблицы?

Ответы [ 2 ]

1 голос
/ 04 марта 2016

Я знаю, что это старый, но я также хочу отсортировать таблицы и функции в моем DBML, чтобы сделать его более управляемым в Git. Следующий код консольного приложения, кажется, работает довольно хорошо. Вы можете перетащить файл DBML на исполняемый файл или настроить файл bat или событие сборки в своем проекте (ах).

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace DbmlSorter
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 0)
                return;

            var fileName = args[0];

            try
            {
                if (!File.Exists(fileName))
                    return;

                SortElements(fileName);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            Console.WriteLine();
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }

        private static void SortElements(string fileName)
        {
            var root        = XElement.Load(fileName);

            var connections = new SortedDictionary<string, XElement>();
            var tables      = new SortedDictionary<string, XElement>();
            var functions   = new SortedDictionary<string, XElement>();
            var others      = new SortedDictionary<string, XElement>();

            foreach (var element in root.Elements())
            {
                var key = element.ToString();

                if (key.StartsWith("<Connection"))
                    connections.Add(key, element);

                else if (key.StartsWith("<Table"))
                    tables.Add(key, element);

                else if (key.StartsWith("<Function"))
                    functions.Add(key, element);

                else
                    others.Add(key, element);
            }

            root.RemoveNodes();

            foreach (var pair in connections)
            {
                root.Add(pair.Value);

                Console.WriteLine(pair.Key);
            }

            foreach (var pair in tables)
            {
                root.Add(pair.Value);

                Console.WriteLine(pair.Key);
            }

            foreach (var pair in functions)
            {
                root.Add(pair.Value);

                Console.WriteLine(pair.Key);
            }

            foreach (var pair in others)
            {
                root.Add(pair.Value);

                Console.WriteLine(pair.Key);
            }

            root.Save(fileName);
        }
    }
}
1 голос
/ 31 октября 2010

Возможное решение - написать небольшое приложение, которое читает XML, сортирует его по своему вкусу и выводит обновленную версию.

...