Ho un campo varbinary (max) in uno dei miei tavoli ma non ne ho bisogno ogni volta e sto cercando un modo per recuperarlo dal database solo quando necessario. Sto usando ADO.NET Entity Framework. Come farlo?Come caricare i campi varbinary (max) solo quando necessario con ADO.NET Entity Framework?
risposta
La soluzione era creare una tabella separata con il campo varbinary e fare 1-a-1 relazione tra le tabelle
Un modo potrebbe essere quello di proiettare la vostra set di risultati in un tipo anonimo, quando non è necessario il blob:
from entity in context.Entities
select new
{
Field1 = entity.Field1,
Field2 = entity.Field2
}
In questo esempio, solo Field1 e Campo2 verranno caricati.
Questo metodo ha lo svantaggio che non è possibile aggiornare l'istanza restituita e fare context.SaveChanges. Anche se direi che salvare un'istanza senza la piena conoscenza dell'istanza è borderline non sicura. Questo metodo è utile quando si desidera un lungo elenco di restituire le istanze, ma verrà eseguita una query per una singola istanza, il campo varbinary e tutto, prima di aggiornare effettivamente.
Grazie per l'assistenza. Stavo cercando qualcosa di simile al caricamento lazy del campo varbinary :) ma sembra che questo non sia possibile. – Emil
Non è necessariamente creare tabella separata. Dovresti fare diversi passaggi. Supponiamo di avere una tabella "Documenti" (Id, Nome, Dati (varbinary)).
- Aprire EF designer, copiare e incollare l'entità 'Documento'.
- Rinominarlo in "DocumentData". Aggiungi mappatura alla tabella 'Documenti'.
- Elimina la proprietà "Dati" nell'entità "Documento".
- Elimina la proprietà 'Nome' nell'entità 'DocumentData'.
- Fare clic con il tasto destro del mouse sull'entità 'DocumentData' e aggiungere una nuova associazione. Seleziona l'associazione 1-a-1 con l'entità 'Documento'.
- Selezionare una nuova associazione, andare su Proprietà, fare clic su '...' nel campo 'Limite referenziale', selezionare l'entità 'Documento' come principale, lasciare tutto come predefinito (Id -> Id) e fare clic su OK.
Ora costruire il progetto.
NOTA. Ora, quando si crea nuova entità 'documento' si dovrebbe anche creare nuova entità 'DocumentData', anche se non si desidera inserire ancora dati:
Document doc = new Document();
doc.Name = "My document";
doc.DocumentData = new DocumentData();
context.Documents.Add(doc);
context.SaveChanges();
Tabella splitting. Lo strumento Entity Developer consente di eseguire ciò visivamente. Puoi mappare la tua entità per diverse tabelle.
È necessario rimuovere il campo varbinary dalla tabella e inserirlo in un'altra tabella, creando una relazione uno a uno tra quelli. Questa è una buona pratica perché puoi facilmente implementare il caricamento lazy e altre cose ..
- 1. Entity framework e VARBINARY
- 2. ADO.NET Entity Framework o ADO.NET
- 3. Entity Framework VS Ado.net
- 4. Entity Framework 3.5 - Come caricare i bambini
- 5. Analisi delle prestazioni ADO.NET e Entity Framework
- 6. concorrenza ottimistica in ADO.NET Entity Framework
- 7. ADO.NET Entity Framework e NHibernate: quando utilizzare uno sull'altro
- 8. Framework Entity ADO.NET ObjectContext - Caching Domanda
- 9. LINQ o ADO.net Entity Framework - quale imparare?
- 10. Framework Entity ADO.Net su più database
- 11. Mappatura della proprietà del tipo di oggetto a varbinary (MAX) in Entity Framework
- 12. ADO.NET Entity Framework con OLE DB Accesso origine dati
- 13. Problema MSDTC con transazioni in ADO.NET Entity Framework
- 14. Come inserire 0 nel campo varbinary (max)
- 15. varbinary (max) datatype non valido
- 16. modo migliore per aggiornare i campi modificabili solo con Entity Framework
- 17. Come utilizzare una stored procedure in ADO.NET Entity Framework
- 18. SQLite con Entity Framework
- 19. dovrei usare Entity Framework invece di raw ADO.NET
- 20. come caricare/visualizzare immagini utilizzando ASP.net MVC4 con Entity Framework
- 21. Fluente NHibernate, varbinary (max) e SQLite
- 22. fornitore di ADO.NET Entity Framework Sql.Data.Client non trovato
- 23. Entity Framework 6 e Unit of Work ... Dove, Quando? È come le transazioni in ado.net?
- 24. Ricerca Entity Framework 4 su campi combinati
- 25. Mappatura varbinary (max) EF4 - Codice primo errore
- 26. Campi Entity Framework 5 e XElement
- 27. Aggiornamento sulla tabella padre con Entity Framework ado.net con Servizi di dominio
- 28. Come caricare gli script prima quando necessario con require.js?
- 29. Relazione sulla stessa tabella con Entity Framework
- 30. Come posso connettersi a Oracle in ADO.NET Entity Data Model
Non sempre possibile su uno schema esistente, ma probabilmente l'approccio più semplice quando è possibile. L'ho fatto, con una chiave esterna nella tabella "secondaria" nella mia "tabella principale", controllando se FK è nullo o non permette di sapere se e se un record "secondario" esiste senza doverlo effettivamente caricare. – AFract