import data from xml into database
i would like to import data into my database through an xml file:
var doc = XDocument.Load(XMLFile);
var nodes = from e in doc.Descendants("Person")
where e.Element("PersonID").Value == "1"
select e;
The person table has same structure as the data from nodes. Is it handy to use entity fra开发者_运维百科mework/linq-to-xml ?
I don't know what you mean by "handy", but it is certainly possible.
You can map the XElement
nodes to your LINQtoSQL/EF-generated objects quite easily, if the schemas match.
Your above code should result in an IEnumerable<XElement>
with the XName
"Person",
so from there you just need to do something like
IEnumerable<Person> people = nodes.Select(xe => new Person {
PersonID = int.Parse(xe.Element("PersonID").Value),
OtherProperty = xe.Element("OtherProperty").Value
});
You will need to do some conversions like the int.Parse()
for some datatypes, because XElement.Value
returns a string.
Then to save it to the database, let's assume MyDataContext
is a LINQ to SQL generated DataContext
object with a property People
that is a Table<Person>
. All you have to do is:
MyDataContext db = new MyDataContext();
db.People.InsertAllOnSubmit(people);
db.SubmitChanges();
If the XML's format is right - i.e. if it uses the same format that the DataSet
uses - you can just read it using DataSet.ReadXml()
and then use all of the normal ADO tools for inserting the data into your database. Though it really helps if you've actually generated the XML from a DataSet
in the first place and thus have a schema for ReadXml
to use, because that resolves a lot of data type conversion issues that you'd otherwise have to take care of explicitly.
精彩评论