Come immagini Store utilizzando Entity Framework Codice primo CTP 5?
-
09-10-2019 - |
Domanda
Sto solo cercando di capire se c'è un modo semplice per memorizzare e recuperare dati binari (file) utilizzando EF Codice primo CTP 5? Mi piace molto utilizzare il tipo FILESTREAM, ma sono davvero solo in cerca di un modo per farlo funzionare.
Soluzione
Non è possibile utilizzare SQL FILESTREAM
in EF. EF si suppone che il lavoro sulla parte superiore del server di database diversi, ma funzionalità FILESTREAM è caratteristica specifica di SQL 2008 e più recente. Si può provare a farlo vecchia maniera -. L'uso varbinary(max)
nella tabella del database e l'uso di array di byte nella classe mappata ??p>
Modifica
Little chiarimento - è possibile utilizzare FILESTREAM
nel database, ma EF non approfittare dello streaming. Sarà caricarlo come varbinary(max)
standard.
Altri suggerimenti
Ho sempre creare un'altra classe come ProductImage
con un'associazione uno-a-uno, al fine di gestire il caricamento pigro e anche per normalizzare la tabella:
public class ProductImage
{
public int ProductId { get; private set; }
public byte[] Image { get; set; }
}
Basta dichiarare la vostra proprietà come byte [] come detto Ladislav.
public class Product
{
public int Id { get; private set; }
public string Name { get; set; }
public byte[] ProductImage { get; set; }
}
Questo è più o meno di esso. Se non mappare la proprietà la convenzione è associato a un varbinary(max)
.
Se si dispone di una colonna di immagini nel database già basta aggiungere [Column(TypeName = "image")]
sulla proprietà productimage o se si preferisce la mappatura del codice aggiungere questo al vostro sostituzione OnModelCreating nella classe del contesto:
modelBuilder.Entity<Product>().Property(p => p.ProductImage).HasColumnType("image");
Il problema che ho con essa è che non ho trovato un modo per rendere la proprietà pigri come Non necessariamente voglio caricare i dati binari ogni volta che vado a prendere un prodotto. Io non sono sicuro che ricordo bene ma NHibernate posso farlo fuori dalla scatola.