Sto utilizzando il framework di entità per connettersi al database. Ho un piccolo problema:Recupera un oggetto da entityframework senza campo ONE
Ho una tabella che ha una colonna varbinary (MAX) (con filestream).
Sto utilizzando la richiesta SQL per gestire la parte "Dati", ma EF per il resto (metadati del file).
Ho un codice che deve ottenere tutti i file id, filename, guid, data di modifica, ... di un file. Questo non ha bisogno del campo "Dati".
C'è un modo per recuperare un elenco ma senza questa colonna riempita?
Qualcosa di simile
context.Files.Where(f=>f.xyz).Exclude(f=>f.Data).ToList();
??
So che posso creare oggetti anonimi, ma ho bisogno di trasmettere il risultato a un metodo, quindi nessun metodo anonimo. E io non voglio metterlo in una lista di tipo anonimo, e quindi creare un elenco del mio tipo non anonimo (File).
L'obiettivo è di evitare questo:
using(RsSolutionsEntities context = new RsSolutionsEntities())
{
var file = context.Files
.Where(f => f.Id == idFile)
.Select(f => new {
f.Id, f.MimeType, f.Size, f.FileName, f.DataType,
f.DateModification, f.FileId
}).FirstOrDefault();
return new File() {
DataType = file.DataType, DateModification = file.DateModification,
FileId = file.FileId, FileName = file.FileName, Id = file.Id,
MimeType = file.MimeType, Size = file.Size
};
}
(sto usando qui il tipo anonimo perché altrimenti si otterrà un NotSupportedException: l'entità o il tipo complesso 'ProjectName.File' non può essere costruita in un . query LINQ to Entities)
(ad esempio, questo codice generare l'eccezione precedente:
File file2 = context.Files.Where(f => f.Id == idFile)
.Select(f => new File() {Id = f.Id, DataType = f.DataType}).FirstOrDefault();
e "File" è il tipo che ottengo con un context.Files.ToList()
. Questa è la buona classe:
using File = MyProjectNamespace.Common.Data.DataModel.File;
File è una classe nota della mia EF DataContext:
public ObjectSet<File> Files
{
get { return _files ?? (_files = CreateObjectSet<File>("Files")); }
}
private ObjectSet<File> _files;
È sufficiente rimuovere la colonna dall'oggetto EF? – Gabe
Vorrei poterlo ma è una colonna "NON NULL", e EF non mi piace quando ho una colonna non nulla che non è nel modello – J4N
L'unica ragione per cui EF avrebbe un problema con le colonne non null escluse è durante 'INSERT' nel database. Puoi aggirare il problema usando procedure, trigger e altri metodi. Per 'SELECT' è assolutamente ** possibile ** escludere le colonne della tabella. – Yuck