1

WCF データ サービス (Odata) を使用してカスタム ビジネス ロジックをどこに記述すればよいか考えています。

私はoDataを初めて使用しますが、エンティティをクエリする簡単な方法を提供することは理解していますが、もっと多くのことをしたい(別のエンティティで遊ぶ必要があります)。ここにシナリオがあります。既存の通常の WCF サービスがあり、いくつかの計算を行い、最終的に整数のリストを返します。

oData を使用して同じ WCF サービスを実装するにはどうすればよいですか。

アトゥル・スレカ

4

2 に答える 2

1

カスタム ビジネス ロジックは、WCF Data Services のコンテキスト レベル サービス メソッド/関数インポートを使用して、OData エンドポイントに追加できます。これにより、スカラー値、コレクション、またはクエリ可能なコレクションを返すメソッドを作成できます。コード スニペットはJayData.orgからコピーされます

[WebGet]
public Product[] GetCheapProducts()
{
    return this.CurrentDataSource
                        .Products
                        .OrderByDescending(p => p.Unit_Price)
                        .Take(5)
                        .ToArray();
}

[WebGet]
public IQueryable<Product> GetBeverages()
{
    return this.CurrentDataSource
                    .Products
                    .Where(p => p.Category.Category_Name == "Beverages");
}

[WebGet]
public int AddTwoNumbers(int a, int b) 
{
    return a + b;
}

ASP.NET Web API を介して OData エンドポイントを発行する場合、それはアクションと呼ばれ、エンティティ セットまたはエンティティのレベルで定義できます。

public class YourController : ODataController
{
        [HttpPost]
        public string GetFirstArticleTitle([FromODataUri] int key, ODataActionParameters parameters) { 
            var contains = (string)parameters["contains"] ?? "";
            return db.Articles.Where(a => a.Category.Id == key && a.Title.Contains(contains)).Select(a => a.Title).FirstOrDefault() ?? " - ";
        }
}
于 2013-07-04T10:21:09.473 に答える