W tym temacie wymyśliłem wiele ślepych zaułków. Podobno .NET 3.5 SP1 ma wsparcie dla obiektów ADO.NET Entity Framework w kontraktach WCF. Ale kiedy szukam solidnych informacji na ten temat, nie otrzymuję wielu odpowiedzi. Znalazłem ten jeden fragment w wątku MSDN. Czy ktokolwiek ma z tym jakieś doświadczenie? Co stało się z [DataContract]? Czy to wszystko? Dlaczego jest tak mało materiału na ten temat?Kontrakty WCF z Entity Framework?
To odpowiedź od Tim Mallalieu w Microsoft.
Typy encji generowane w ramach Entity Framework to domyślnie kontrakty danych. Gdybym miał stworzyć prosty model w Entity Designer, taki jak poniżej: Typ jednostki koszyka jest domyślnie DataContract ze wszystkimi właściwościami opisanymi jako elementy danych. Możemy to wykorzystać w usług WCF w następujący sposób:
[ServiceContract]
public interface IService1
{
[OperationContract]
Cart[] AllCarts();
}
public class Service1 : IService1
{
public Cart[] AllCarts()
{
using (MSPetShop4Entities context = new MSPetShop4Entities())
{
var carts = from c in context.Carts select c;
return carts.ToArray();
}
}
}
jako żywe są DataContracts można teraz toczyć swoje usługi zgodnie z potrzebami i wysłać te po drugiej stronie drutu.
W końcu zrobiłem dokładnie to. Mam nadzieję, że to nie pomyłka na dłuższą metę. Minusem, jaki widzę do tej pory, jest to, że zakończyłem implementację wzorca repozytorium po stronie klienta, a nie po stronie modelu. Nie jestem z tego powodu szczęśliwy i prawdopodobnie będę musiał później dokonać refaktoryzacji. – Weej
Niebezpieczeństwo ADO.NET Data Services polega na tym, że trudno jest zastosować podejście DDD. Usługi ADO.NET Data Services należy traktować tylko jako: usługi danych. Jeśli potrzebujesz silniejszego zestawu usług modelowych, musisz go utworzyć osobno. –
Nawet z najnowszą wersją ADO .NET Data Services i EFCF 4.1 nadal jest poważnie ograniczona. Na przykład żaden z operatorów agregujących z LINQ nie jest obsługiwany, w tym 'Distinct()'. Jeśli potrzebujesz czegoś więcej niż funkcji CRUD, powinieneś trzymać się z dala od usług danych. – Yuck