Я изучаю идею реализации 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.