[英]LINQ to SQL DataContext To XML With XSD Schema
我的Linq.DataContext中有一些数据。
我成功使用以下代码将其转换为XSD-模式:
Dim changeset As System.Data.Linq.ChangeSet = c.GetChangeSet()
Dim objDic As New Dictionary(Of System.Type, List(Of Object))
If Not changeset Is Nothing AndAlso Not changeset.Inserts Is Nothing AndAlso Not changeset.Inserts.Count = 0 Then
For Each i As Object In changeset.Inserts
Dim t As System.Type = i.GetType()
If objDic.ContainsKey(t) Then
objDic(t).Add(i)
Else
Dim l As New List(Of Object)
l.Add(i)
objDic(t) = l
End If
Next
'XML schema
For Each t As System.Type In objDic.Keys
Dim s As New System.IO.FileStream(String.Format("{0}{1}", LinqBulkInsert.My.Application.Info.DirectoryPath, "\xmlschema.xsd"), System.IO.FileMode.Create)
Using xmlw As New System.Xml.XmlTextWriter(s, System.Text.Encoding.UTF8)
xmlw.WriteStartDocument()
xmlw.WriteStartElement("xsd:schema")
xmlw.WriteAttributeString("xmlns:xsd", "http://www.w3.org/2001/XMLSchema")
xmlw.WriteAttributeString("xmlns:sql", "urn:schemas-microsoft-com:mapping-schema")
xmlw.WriteStartElement("xsd:element")
xmlw.WriteAttributeString("name", t.Name)
xmlw.WriteAttributeString("sql:relation", c.Mapping.GetTable(t).TableName)
xmlw.WriteStartElement("xsd:complexType")
xmlw.WriteStartElement("xsd:sequence")
Dim pinfos As System.Reflection.PropertyInfo() = t.GetProperties
For Each pi As System.Reflection.PropertyInfo In pinfos
If Not pi.PropertyType.Equals(GetType(System.Guid)) Then
xmlw.WriteStartElement("xsd:element")
xmlw.WriteAttributeString("name", pi.Name)
xmlw.WriteAttributeString("type", "xsd:" & XsdTypeConverter.getInstance.GetSimpleType(pi.PropertyType))
xmlw.WriteEndElement()
End If
Next
xmlw.WriteEndDocument()
xmlw.Flush()
End Using
s.Close()
'Schema wordt succesvol weggeschreven in xmlschema.xsd
Next
现在我的问题是,如何将数据提取到完整的readabke XML文件(其中包含所有数据)。
尝试在上下文中使用DataContract和DataMember属性。 阅读以下文章:
http://msdn.microsoft.com/en-us/library/bb546185.aspx http://msdn.microsoft.com/en-us/library/bb546184.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.