1

私のプロジェクトには、すべての LinqToSql オブジェクトを含む DBML ファイルがあります。最初に DB からインポートしましたが、すべて問題ありませんでした。現在、DB が拡大しているため、O/R デザイナーのダイアグラムに新しいテーブルを追加していますが、常に XML の末尾に追加されます。外部キーを定義するとき、使用可能なテーブルが常に XML に表示される順序でリストされるため、これは少し面倒です。

テーブル名に従ってXMLテーブル宣言をアルファベット順にソートする方法はありますか?

4

2 に答える 2

1

これが古いことはわかっていますが、DBML のテーブルと関数を並べ替えて、Git でより管理しやすくしたいと考えています。次のコンソール アプリケーション コードは、かなりうまく機能しているようです。DBML ファイルを exe にドラッグ アンド ドロップするか、プロジェクトでバッチ ファイルまたはビルド イベントを設定することができます。

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);
        }
    }
}
于 2016-03-04T00:30:00.477 に答える
1

考えられる解決策は、XML を読み取り、好みに合わせて並べ替え、更新されたバージョンを出力する小さなアプリケーションを作成することです。

于 2010-10-31T08:41:30.053 に答える