Проблема с сервисом WCF Data, выставляющая собственные частичные методы модели EF4 - PullRequest
0 голосов
/ 01 сентября 2011

Я изучаю идею реализации API веб-сервиса с использованием WCF Data Services и EF4. Понимая, что некоторые операции требуют сложной бизнес-логики, я решил создать частичный класс с тем же именем, что и основной частичный класс контекста данных EF, и реализовать там дополнительные методы для обработки более сложной бизнес-логики. Когда объект контекста EF используется напрямую, дополнительный метод обнаруживается (через intellisense) и работает правильно. Когда классы EF предоставляются через службу данных WCF, а ссылка на службу создается и используется в другом проекте, новый метод не отображается в intellisense или в сгенерированном файле Service.cs (конечно, я обновил ссылку и даже удалил и заново добавил). Нативные методы данных (т.е. context.AddObject () и context.AddToPeople ()) работают должным образом, но новый метод даже не доступен.

Мои классы EF выглядят примерно так:

namespace PeopleModel
{
    //EF generated class
    public partial class PeopleEntities : ObjectContext
    {
        //Constructors here

        //Partial Methods here

        //etc....
    }

    //Entity classes here

    //My added partial class
    public partial class PeopleEntities
    {
        public void AddPerson(Person person)
        {
            base.AddObject("People", person);
        }       
    }   
}

В файле .svc нет ничего особенного. Файл Reference.cs, содержащий автоматически сгенерированные прокси-классы, не имеет нового метода AddPerson ().

Мои вопросы: 1. Есть идеи, почему веб-сервис не видит добавленный частичный класс, но при непосредственном использовании объектов EF метод существует и работает должным образом? 2. Является ли использование частичного класса с дополнительными методами хорошим решением проблемы обработки сложных бизнес-правил с помощью EF-сгенерированной модели?

Мне нравится идея позволить инфраструктуре oData предоставлять механизм запросов к открытым объектам данных и тот факт, что вы можете иметь спокойный веб-сервис с некоторыми из преимуществ SOAP.

1 Ответ

2 голосов
/ 06 сентября 2011

Сервисные операции распознаются, только если они присутствуют в классе, производном от DataService.Служба данных WCF не будет искать для них контекстный класс.Также обратите внимание, что методы не предоставляются по умолчанию, вам нужно приписать их с помощью WebGet или WebInvoke и разрешить доступ к ним в вашей реализации InitializeService.http://msdn.microsoft.com/en-us/library/cc668788.aspx

...