Метод обслуживания данных WCF для агрегации с фильтром - PullRequest
0 голосов
/ 10 октября 2011

Мне нужно собрать некоторые данные из моей службы данных wcf, чтобы сделать что-то вроде «ежемесячного отчета». Агрегация Afaik невозможна через протокол odata. Я предполагаю, что должен реализовать свой собственный метод WebGet для этого (или есть другая возможность?). Мой первый выстрел будет:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, UseSynchronizationContext = false)]
class MyDataService : DataService<MyContext>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;

        config.SetEntitySetAccessRule("*", EntitySetRights.All);
        config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
        config.UseVerboseErrors = true;
    }

    [WebGet]
    public int SumColumnOfMyTable()
    {
        // return here the aggregated data with the usage of the odata $filter param
    }

}

Я хочу использовать параметр $ filter протокола odata для фильтрации агрегации. Это возможно? Это правильный способ агрегирования с WCF Data Services? Я совершенно невежественен и не могу найти никакой полезной информации об этом. Заранее спасибо ...

1 Ответ

0 голосов
/ 14 октября 2011

После переосмысления этого я пришел к выводу, что лучшим и самым простым способом, вероятно, будет представление базы данных. Это означает, что я мог бы создать дополнительную сущность, которая сопоставляется с представлением и к которой затем можно получить доступ через службу данных. Однако это вызывает у меня проблему, поскольку у представления нет первичного ключа ...

Есть еще идеи?

ОБНОВЛЕНИЕ: Я решил проблему с первичным ключом, генерируя идентификатор для каждой строки в представлении (Firebird):

coalesce(cast(rdb$get_context('USER_TRANSACTION', 'row#') as integer), 0) + 1 as ID

Однако, похоже, не существует "чистого" решения этой проблемы со службами данных wcf?

...