импортировать данные из XML в базу данных - PullRequest
0 голосов
/ 04 апреля 2011

Я хотел бы импортировать данные в свою базу данных через XML-файл:

var doc = XDocument.Load(XMLFile);
var nodes = from e in doc.Descendants("Person")
                    where e.Element("PersonID").Value == "1"
                    select e;

Таблица лиц имеет ту же структуру, что и данные из узлов. Удобно ли использовать сущность framework / linq-to-xml?

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

Я не знаю, что вы подразумеваете под "удобством", но это, безусловно, возможно.

Вы можете довольно просто сопоставить узлы XElement с вашими объектами, сгенерированными LINQtoSQL / EF, если схемыmatch.

Ваш приведенный выше код должен привести к IEnumerable<XElement> с XName "Person",

, поэтому от вас просто нужно сделать что-то вроде

  IEnumerable<Person> people = nodes.Select(xe => new Person { 
                          PersonID = int.Parse(xe.Element("PersonID").Value), 
                          OtherProperty = xe.Element("OtherProperty").Value
                                 });

Вам потребуется выполнить некоторые преобразования, например int.Parse() для некоторых типов данных, поскольку XElement.Value возвращает строку.

Затем, чтобы сохранить ее в базе данных, давайте предположим, что MyDataContext - это LINQ to SQLсгенерированный DataContext объект со свойством People, то есть Table<Person>.Все, что вам нужно сделать, это:

  MyDataContext db = new MyDataContext();
  db.People.InsertAllOnSubmit(people);
  db.SubmitChanges();
1 голос
/ 04 апреля 2011

Если формат XML правильный - то есть если он использует тот же формат, что и DataSet - вы можете просто прочитать его, используя DataSet.ReadXml(), а затем использовать все обычные инструменты ADO для вставки данных в базу данных.Хотя это действительно помогает, если вы изначально сгенерировали XML из DataSet и, следовательно, имеете схему для использования ReadXml, потому что это решает множество проблем преобразования типов данных, которые в противном случае вам пришлось быпозаботься о явном.

...