WCF Сервис для доступа к базе данных через EntityFramework

200
27 ноября 2017, 15:27

Я бы хоте посоветоваться с вами. Смотрите, такая ситуация, я создал отдельно бд и сгенерил dbmx используя Entity Framework (Database First). Так я имею где то 10 таблиц, к которым сервис обязан давать доступ в случае получение некоторого запроса от клиента. Вот тут я пытаюсь разобраться как мне реализовать возможность доступа к разным частям таблицы. Знаю, что существует такая штука как WCF Data Service, которая бы решила мои проблемы, но я пользуюсь VS 2017, в которой нету возможности юзать WCF Data Service, по этому этот вариант отбрасываю. Дальше я думал сделать таким образом, чтобы создать на стороне сервиса некоторые трансляторы Data Contract для каждой таблицы и задать методы для приведения сущностей созданных EntityFramework-м к "транслируемым". Это честно говоря максимум на что хватило моих познаний.

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

Answer 1

Каждый сервис разрабоатывается для какой то цели. Рассмотрим пример. Например, у нас есть клиент (установленный на клиентской машине) и ему надо знать текущее время. Использовать время компьютера, где установлен клиент, нельзя, так как время на клиенте может спешить\отставать. Так у нас появляется необходимость написать свой сервис, который вернет текущее время. Что этот сервис ещё может сделать? Вернуть текущее время определенного часового пояса, установленного на клиентском компьютере. Так у нас появляются методы

DateTime GetCurrentTime(string timeZone);
DateTime GetCurrentTimeUTC();

^^ это АПИ нового сервиса. То есть контракт, котрого сервис придерживается. Здесь нет описания, как новый сервис обрабатывает эти запросы. Здесь не важно, как сервис хранит временные зоны. Здесь не важно, как сервис сам получает текущее время. Это все не имеет значения для клиента. Клиенту достаточно видеть эти 2 метода и вызывать тот, который ему необходим.

То, что было выше, можно рассматривать как базовые требования к новому сервису. Далее, когда дело доходит до реализации сервиса, там уже разработчику надо думать, что и как ему нужно хранить, как и что обрабатывать, какую БД использовать и прочие ньюансы, которые клиенту сервиса абсолютно безразлины и неведомы. Это нормальный процесс разарботки сервисов.

Вы же идете в обратном направлении. Вы пытаетесь по схеме построенной БД создать сервис. Это неверно, так не надо делать. Что бы я хотел вам посоветовать:

  1. Определитесь с требованиями для вашего сервиса. Что ваш сервис должен делать, какие методы вашего сервиса клиент захочет вызывать.
  2. Основываясь на п.1 постройте API вашего сервиса. То есть определитесь с набором методов и требованиям к ним.
  3. Основываясь на п.2 начните реализацию вашего сервиса. Тут уже не важно, Code-First у вас или вы в файлике все храните. Это не имеет эначения для клиента - это имеет значение только для разработчика сервиса, так как разработчик должен сделать все, чтобы опубликованный API (или ещё его наывают контракт) выполнялся и клиент при вызовал этого АПИ получал то, что ожидается получить при вызове АПИ.

А база данных или способ хранения информации никогда не должен влиять на предоставляемый вашим сервисом АПИ, так как сегодня у вас SQL Server, завтра эффективные менеджеры попросят все переписать на Postgres, послезватра маркетологи запросят переделать по Mongodb.

READ ALSO
Не проходят ajax запросы в Microsoft Edge

Не проходят ajax запросы в Microsoft Edge

Есть веб-страница, которая делает ajax-запросы к API, расположенному на другом доменеВ API выставлены заголовки Access-Control-Allow-Origin:*, и во всех браузерах,...

292
JS Window Open как обойти блокировку

JS Window Open как обойти блокировку

Здравствуйте, есть ли актуальный способ обойти блокировку принудительного всплывающего окна браузерами? windowopen('mysite');

306
Как отследить нажатие Enter

Как отследить нажатие Enter

Доброго времени суток

251