我在我的項目中使用了所有的LinqToSql對象都有一個DBML文件。最初我從DB中導入它們,一切都很好。現在,隨着我的數據庫不斷增加,我一直在O/R設計器中將新表添加到圖中,但它們總是被附加到XML的末尾。這有點痛苦,因爲當我定義外鍵時,它總是按照它們出現在XML中的順序列出可用表。如何按字母順序排序DBML對象?
任何想法如何根據表名稱按字母順序對XML表聲明進行排序?
我在我的項目中使用了所有的LinqToSql對象都有一個DBML文件。最初我從DB中導入它們,一切都很好。現在,隨着我的數據庫不斷增加,我一直在O/R設計器中將新表添加到圖中,但它們總是被附加到XML的末尾。這有點痛苦,因爲當我定義外鍵時,它總是按照它們出現在XML中的順序列出可用表。如何按字母順序排序DBML對象?
任何想法如何根據表名稱按字母順序對XML表聲明進行排序?
我知道這是舊的,但我也想對我的DBML中的表和函數進行排序,使它在Git中更易於管理。以下控制檯應用程序代碼似乎工作得很好。您可以將一個DBML文件拖放到exe文件中,或者您可以在項目中設置一個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);
}
}
}
一個可能的解決方案是編寫一個讀取XML的小應用程序,按照您的喜好對它進行排序並輸出更新後的版本。
好的,這是勤勞的解決方案,它在技術上是正確的,但我希望有一個懶惰的出路...... :) – 2010-10-31 12:25:20
可能不是。我的第一個選擇是手動創建文件,但我認爲你不會喜歡那個:)。 – 2010-10-31 13:27:36
喜歡此帖https://github.com/timabell/ef-edmx-sorter – 2016-01-30 13:23:12