オブジェクトで構成される単純な DAL があります。このオブジェクトには、受信した問い合わせ (XML) を処理して DB に書き込むために使用されるオブジェクトがSalesEnquiry
含まれます。ここまでは順調ですね。List<T>
Vehicle
ただし、この DB 内のデータをさらに処理する別のアプリを作成しているので、これらの同じ DAL オブジェクトを使用してデータを取得および操作したいと考えています。
従来のレコードセットを返してそれらを反復処理し、SalesEnquiry/Vehicle オブジェクトの各プロパティを手動で入力するのではなく、SQL Server からデータを XML として返して逆シリアル化できると考えました。私はすでにこの手法を使用して、最初に着信データを処理しています。
ただし、SQL Server で適切な XML を構築できるかどうか、またはどのように構築できるか、または 2 段階で構築する必要があるかどうかはわかりません。
以下は、問い合わせを 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 を作成できるようにする方法が必要です...