我有简单的DAL,它由一个SalesEnquiry
对象,其中包括一个Vehicle
对象,它是用来处理传入的查询(XML)的List<T>
,并把它们写到数据库。到现在为止还挺好。填充母+子对象
但是,我正在编写另一个应用程序,以进一步处理此数据库中的数据,所以我想使用这些相同的DAL对象来检索和操作数据。
而不是返回传统的记录集并遍历它们,手动填充SalesEnquiry/Vehicle对象的每个属性,我认为我可以将数据从SQL Server作为XML返回并对其进行反序列化。我已经使用这种技术来处理传入的数据。
但是,我不确定是否/如何在SQL Server中构建适当的XML,或者如果我必须分两个阶段来完成。
下面将提取查询作为XML:
Select EnquiryID as 'enquiry/enquiryid',
EnquiryNo as 'enquiry/enquiryno',
CompanyName as 'enquiry/company'
From Enquiries e
Where e.EnquiryID = 23
For XML PATH
和下面将提取的相关车辆为XML:
Select VehicleID as 'vehicle/vehicleid',
VehicleReg as 'vehicle/vehiclereg'
From Vehicles v
Where v.EnquiryID= 23
For XML PATH
生成的XML我后:
<?xml version="1.0" encoding="utf-8"?>
<enquiry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<enquiry_id>123</enquiry_no>
<enquiry_no>100004</enquiry_no>
<company>MyCompany</company>
<enquiry_no>100004</enquiry_no>
<vehicles>
<vehicle>
<vehicle_registration>ABC123</vehicle_registration>
</vehicle>
<vehicle>
<vehicle_registration>XYZ789</vehicle_registration>
</vehicle>
</vehicles>
</enquiry>
我可以在SQL Server中创建它,还是必须在我的DAL中手动执行此操作?
更新:
从Shunty的建议继,我使用了以下内容:
Select enquiry.EnquiryID as enquiry_id, enquiry.EnquiryNo, enquiry.CompanyName, VehicleID as [vehicle.vehicle_id], VehicleReg as [vehicle.vehicle_registration]
From Enquiries as enquiry
inner join Vehicles on Vehicles.EnquiryID = enquiry.EnquiryID
Where enquiry.EnquiryID = 23
For XML AUTO, ELEMENTS
..我可以亲近,但我不太有:
<?xml version="1.0" encoding="utf-8"?>
<enquiry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<enquiry_id>123</enquiry_no>
<enquiry_no>100004</enquiry_no>
<company>MyCompany</company>
<enquiry_no>100004</enquiry_no>
<vehicle>
<vehicle_registration>ABC123</vehicle_registration>
</vehicle>
<vehicle>
<vehicle_registration>XYZ789</vehicle_registration>
</vehicle>
</enquiry>
要成功反序列化,我需要我的<vehicle>
元素归入<vehicles>
父元素。必须有一种方法来鼓励SQL创建正确的XML ...
我可以吻你......但我不会。:) 我看了Root(),但可以弄清楚如何使用它 - 子查询不会发生在我身上。谢谢。 – CJM 2010-08-11 12:06:04