Прочитайте DBML xml с LINQ to SQL - PullRequest
       19

Прочитайте DBML xml с LINQ to SQL

1 голос
/ 01 ноября 2009

Я хочу перебрать таблицы в XML-файле dbml. Но я изо всех сил пытаюсь добраться до элементов Type. Как бы я сделал это с помощью LINQ to SQL?

Ответы [ 2 ]

1 голос
/ 01 ноября 2009

Если вы действительно должны (или хотите) использовать синтаксический анализ XML, то стоит обратить внимание на пространство имен в LINQ-to-SQL.

Вот пример того, как считывать список <Type> узлов в узле <Table>:

// create a XmlDocument
XmlDocument doc = new XmlDocument();
doc.Load(@"path-to-your-model.dbml");

// define the namespace to use
XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
mgr.AddNamespace("ns", "http://schemas.microsoft.com/linqtosql/dbml/2007");

// grab the list of all "type" nodes under a "table" node
XmlNodeList types = doc.SelectNodes("/ns:Database/ns:Table/ns:Type", mgr);

// iterate over all nodes found
foreach (XmlNode node in types)
{
   string name = node.Attributes["Name"].Value;
   // or do whatever else you need / want to do here
}

Надеюсь, это немного поможет!

Марк

1 голос
/ 01 ноября 2009

Чтобы получить метаданные о модели DataContext, я использую свойство MappingSource экземпляра DataContext, например, чтобы получить таблицы в модели:

var ctx = new YourDataContext();
var tables = ctx.Mapping.MappingSource.GetModel(ctx.GetType()).GetTables();

foreach (var table in tables)
{
   // table.TableName
}

tables является коллекцией ReadOnlyCollection MetaTable объектов.

...