2009-03-19 20 views

Respuesta

6

La solución fue crear una tabla separada con el campo varbinary y hacer relación de 1 a 1 entre las mesas

+0

No siempre es posible en un esquema existente, pero probablemente sea el más fácil cuando sea posible. Lo hice, con una clave externa a la tabla "secundaria" en mi "tabla principal", verificando si FK es nulo o no permite saber rápidamente si existe o no un registro "secundario" sin tener que cargarlo realmente. – AFract

1

Una forma sería la de proyectar su conjunto de resultados en un tipo anónimo cuando no se necesita la burbuja:

from entity in context.Entities 
select new 
{ 
    Field1 = entity.Field1, 
    Field2 = entity.Field2 
} 

En este ejemplo, sólo Campo1 y Campo2 serán cargados.

Este método tiene la desventaja de que no puede actualizar la instancia devuelta y hacer context.SaveChanges. Aunque argumentaría que guardar una instancia sin un conocimiento completo de la instancia es inseguro. Este método es bueno cuando desea una larga lista de devolución de las instancias, pero consultará una sola instancia, campo varbinary y todo, antes de actualizar realmente.

+0

Gracias por su ayuda. Estaba buscando algo similar a la carga lenta del campo varbinary :) pero parece que esto no es posible. – Emil

4

No es necesariamente para crear tabla separada. Deberías hacer varios pasos. Supongamos que tenemos la tabla 'Documentos' (Id, Nombre, Datos (varbinary)).

  1. Abra el diseñador de EF, copie y pegue la entidad 'Documento'.
  2. Cambie el nombre a 'DocumentData'. Agregar mapeo a la tabla 'Documentos'.
  3. Eliminar la propiedad 'Datos' en la entidad 'Documento'.
  4. Eliminar la propiedad 'Nombre' en la entidad 'DocumentData'.
  5. Haz clic con el botón derecho en la entidad 'DocumentData' y agrega una nueva asociación. Seleccione una asociación de 1 a 1 con la entidad 'Documento'.
  6. Seleccione una nueva asociación, vaya a Propiedades, haga clic en '...' en el campo 'Restricción referencial', seleccione entidad 'Documento' como principal, deje todo como predeterminado (Id -> Id) y haga clic en Aceptar.

Ahora construya el proyecto.

NOTA. Ahora, cuando la creación de nueva entidad 'Documento' también se debe crear una nueva entidad DocumentData 'incluso si usted no desea colocar ningún dato:

Document doc = new Document(); 

doc.Name = "My document"; 
doc.DocumentData = new DocumentData(); 

context.Documents.Add(doc); 
context.SaveChanges(); 
0

Tabla división. La herramienta Entity Developer permite realizar esto visualmente. Puede mapear su entidad para diferentes tablas.

1

Debe eliminar su campo varbinary de la tabla y colocarlo en otra tabla, estableciendo una relación de uno a uno. Esta es una buena práctica porque puede implementar fácilmente la carga diferida y otras cosas.

Cuestiones relacionadas