2015-03-24 14 views
5

Ho una situazione in cui ho un tipo con una proprietà di tipo object, ad es.Mappatura della proprietà del tipo di oggetto a varbinary (MAX) in Entity Framework

public class MyType 
{ 
    public virtual object MyProp{get; get;} 
} 

Questo tipo dovrà essere:

  1. salvati utilizzando Entity Framework a un database, come byte[] (ho capito la logica di serializzazione)
  2. trasmessa attraverso WCF (userò il KnownType attributo)

Come mappare la mia proprietà object assicurando t è stato convertito in un array di byte per l'archiviazione?

NB: La proprietà object sarà un tipo di valore (non complessi)

ho pensato di creare un tipo separato per il salvataggio al database ad esempio:

public class MyTypeEntity 
{ 
    public virtual byte[] MyProp{get; get;} 
} 

Come posso convertire/traduci tra i tipi pur essendo ancora in grado di definire i mapping delle relazioni?

Ciò implica una sorta di intercettazione sul salvataggio?

La soluzione migliore che potrei pensare senza spezzarmi le spalle è semplicemente la memorizzazione dei dati serializzati nel DB.

Se c'era qualche forma di property covariance in C#, forse questo avrebbe funzionato più facilmente. Per quanto ne so, non esiste. Se c'è un'alternativa elegante che posso usare, apprezzerei la tua intuizione.

risposta

11

Si consiglia di mantenere un campo byte[] nell'entità; la tua classe dovrebbe davvero imitare la struttura del database il più fedelmente possibile. Un modo in cui ho fatto qualcosa di simile in passato è creare un file di classe separato (ricorda che le tue entità sono partial) e aggiungere una proprietà NotMapped al secondo file. Puoi fare in modo che getter e setter eseguano la conversione da object a byte[] e nel tuo codice interagiscano sempre con la proprietà object che EF ignorerà. È piuttosto indolore e EF traccerà il campo varbinary su byte[] a cui non si accede direttamente.

+0

Idea geniale! decisamente indolore. Non avevo idea che potessi usare partial (newbie EF). Grazie @DrewJordan – user919426

+0

Puoi includerlo nel primo file se lo volevi ... Mi piace comunque mantenere il modello del database da solo. – DrewJordan

+0

Vedremo cosa sarà più accettabile con la squadra, altrimenti condivido lo stesso sentimento. Devo posizionare eventuali decorazioni di attributi per assicurarmi che non sia mappato? O semplicemente non mapparlo sarà sufficiente? – user919426

Problemi correlati