He venido con muchos callejones sin salida en esta pregunta. Supuestamente, .NET 3.5 SP1 tiene soporte para entidades ADO.NET Entity Framework en contratos WCF. Pero cuando busco información sólida, no recibo muchas respuestas. Encontré este fragmento en un hilo de MSDN. ¿Alguien tiene alguna experiencia con esto? ¿Qué pasó con el [DataContract]? ¿Esto es todo lo que hay que hacer? ¿Por qué hay tan poco material sobre esto?WCF Contracts from Entity Framework?
Esta es la respuesta de Tim Mallalieu en Microsoft.
Los tipos de entidad que se generan en Entity Framework son, por defecto, contratos de datos. Si tuviera que crear un modelo simple en Entity Designer como el siguiente: El tipo de entidad de carrito es por defecto un DataContract con todas las propiedades anotadas como miembros de datos. entonces podemos utilizar esto en un servicio WCF de la siguiente manera:
[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();
}
}
}
A medida que las entidades son DataContracts ahora se puede rodar sus servicios como mejor le parezca y enviar estos a través del cable.
Al final he hecho exactamente eso. Espero que no sea un error a la larga. La desventaja que estoy viendo hasta ahora es que terminé implementando un patrón de repositorio en el lado del cliente y no en el lado del modelo. No estoy contento con eso y probablemente tenga que refactorizar más adelante. – Weej
El peligro de ADO.NET Data Services es que puede ser bastante difícil seguir un enfoque DDD. Debería tratar los Servicios de datos ADO.NET simplemente como eso: servicios de datos. Si necesita un conjunto más sólido de servicios de modelo, deberá crearlo por separado. –
Incluso con la última versión de ADO .NET Data Services y EFCF 4.1, sigue siendo severamente limitante. Por ejemplo, ninguno de los operadores de agregación de LINQ es compatible, incluyendo 'Distinct()'. Si necesita algo más que funciones de CRUD, debe mantenerse alejado de los servicios de datos. – Yuck