entity framework - transaction - EF con Azure-Mezcla de SQL Server y Windows Azure Storage
table storage transaction (2)
Intenta resolver este problema demasiado temprano (en el DAL) en mi opinión. Mire la web, obtiene datos grandes (por ejemplo, imágenes) en una llamada separada al servidor. Eso ha escalado muy bien. Los datos de la imagen no se incluyen en el documento en sí por una razón, simplemente ralentizaría todo y no sería muy tolerante a las fallas. Si los unes en una entidad, obtienes la rápida recuperación de entidades que tu servidor de imágenes desacelera, ya que ambos deben unirse antes de dirigirse hacia la capa de tu empresa y, finalmente, hacia la capa de presentación. Y en la capa de negocios, es probable que estos datos solo estén desperdiciando memoria (es por eso que queremos cargarlo de forma perezosa). Así que creo que estás tomando la decisión demasiado temprano. Lo que usted describe como su objeto de dominio se parece a un objeto de dominio de la capa de presentación, similar a un ViewModel. No soy demasiado aficionado al diseño impulsado por el dominio, pero si bien hay un modelo general de su aplicación, supongo que cada parte de su aplicación requerirá una implementación ligeramente diferente de ese modelo.
Con respecto a la carga diferida, si tiene eso habilitado e intenta enviar su objeto por el cable, incluso si no se cargó la imagen, se serializará ya que el serializador de contrato de datos (o cualquier otro) llamará a su propiedad.
Probablemente esa no sea la respuesta que querías, pero sentí que tenía que decir esto. Por supuesto, estoy abierto a comentarios y críticas.
Quiero utilizar dos fuentes de datos diferentes en mi proyecto de Azure :
- un servidor SQL que contiene información parcial parcial sobre un elemento (permite datos indexables y búsqueda espacial)
- un almacenamiento de Windows Azure que contiene la información restante completa con respecto a un elemento (recuperado por la clave)
De esta manera, puedo combinar el potente servidor SQL con la escalabilidad fácil del almacenamiento de Windows Azure .
Imagina esta clase de dominio POCO:
class Person
{
string Id { get; set; }
string Name { get; set; }
byte[] Picture { get; set; }
string Biography { get; set; }
}
Me gustaría utilizar Entity Framework con un mapeo fluido para que EF entienda que las propiedades Picture y Biography deben cargarse desde Windows Azure Storage (tabla, blob) en lugar de SQL Server (posiblemente Lazy loaded).
¿Hay alguna manera con EF (o NHibernate) para hacer esto o tengo que implementar mi propia estrategia ORM?
Gracias
No creo que pueda informarle a EF sobre el almacenamiento de Azure, pero puede asignar solo las propiedades necesarias a una tabla específica. Por ejemplo,
modelBuilder.Entity<Person>().Ignore(p => p.Picture);
Asumiendo que tiene una clase de repositorio para su clase Person, lo que desea puede lograrse fácilmente completando la clase de repositorio con Azure storage API y EF.