1

MVC の新機能です。私は現在 API を作成しており、XML を返す必要がある厳密な形式を持っています。

現在、EntityModel を使用して SQL ストアド プロシージャを公開しています。次に、SP の複合型を作成しました。

SP を呼び出すコントローラーがあり、結果は XML で返されます。

これは問題ありませんが、現在の出力は次のとおりです (たとえば):

    <product> 
        <productId>12345</productId> 
        <inStock>True</inStock> 
        <shelfLevel>10</shelfLevel> 
        <onOrder>0</onOrder> 
        <height>10</height> 
        <width>15</width> 
        <depth>12</depth> 
        <colour>green</colour> 
    </product>

ただし、次のように構成する必要があります。

   <product> 
        <productId>12345</productId> 
        <availability> 
                <inStock>True</inStock> 
                <shelfLevel>10</shelfLevel> 
                <onOrder>0</onOrder> 
        </availability> 
        <dimensions> 
                <height>10</height> 
                <width>15</width> 
                <depth>12</depth> 
        </dimensions> 
        <colour>green</colour> 
   </product>

EntityModel と複合型の組み合わせの現在のアプローチを使用して、'availabilty' および 'dimensions' ラッパー要素を含める方法がわかりません。

以下は、既存の出力のコントローラーからの私のコードです。

// GET api/product/5 

        //ProductAvailability_Result is the Complex Type derived from the SP output columns 
        public IEnumerable<ProductAvailability_Result> Get(int id) 
        { 

           myDB_DevEntities db = new myDB_DevEntities(); 

           //ProductAvailability is a SP consisting of a simple 'select' statement that returns the resultset 
           var Result = db.ProductAvailability(id); 

           return Result.ToList(); 

        }

これを達成する方法について誰かが何か指針を与えることができますか? 上記の方法を使用しようとすることで、完全に間違った方法でこれにアプローチしていますか?つまり、EntityModelを捨てる必要がありますか? 構造を変更する必要があるまではうまく機能します。

アドバイスをいただければ幸いです。

4

1 に答える 1

0

思い通りに見えるDTO (データ転送オブジェクト) を作成できますが、少しデータ変換を行う必要があります。期待される XML の構造に一致するクラス構造を定義することから始めます。

[XmlRoot("product")]
public class ProductDto
{
    [XmlElement("productId")]
    public int ProductId { get; set; }

    [XmlElement("availability")]
    public AvailabilityDto Availability { get; set; }

    ...
}

[XmlRoot("availability")]
public class AvailabilityDto
{
    [XmlElement("inStock")]
    public bool InStock { get; set; }

    ...
}

次に、API メソッドで、クライアントに返す前に DAO (データ アクセス オブジェクト) を DTO に変換できます。

public ProductDto GetProductAvailability(id)
{
    var result = db.ProductAvailability(id); 

    return new ProductDto
    {
        ProductId = result.productId,
        Availability = new AvailabilityDto
        {
             InStock = result.inStock,
             ...
        },
        ...
    }
}

明らかに、これは膨大な作業になる可能性があるため、私もあなたの質問に対する他の回答がポップアップする可能性があることに興味があります.

于 2013-02-20T22:41:35.610 に答える