Esempio: diciamo che ho queste tre classi. Foo
è un'entità Entity Framework corretta con un DbSet mentre voglio che il mio DbContext EF non sia a conoscenza di Bar
e Baz
perché ho contrassegnato la proprietà di Foo's Bar con il mio attributo SerializedColumn
composto. Applicando tale attributo, voglio che EF serializzi l'istanza di Bar con i suoi Bazes in un singolo campo di stringa e deserializzi in modo trasparente un oggetto Bar quando un Foo viene materializzato da EF.Persistenza e recupero della proprietà di entità serializzata con il codice Entity Framework 6.1 prima
public class Foo
{
public Guid Id { get; set; }
[SerializedColumn]
public Bar Bar { get; set; }
// ..
}
public class Bar
{
public string Name { get; set; }
public Baz[] Baz { get; set; }
// ..
}
public class Baz
{
public string Name { get; set; }
// ..
}
Così colonne della tabella di Foo sarà simile:
[Id] [uniqueidentifier] NOT NULL
[Bar] [nvarchar](max) NULL
E quando interrogo un Foo
ho tornare uno con la proprietà Bar
già deserializzato. Quando inserisco o aggiorno una Foo
la proprietà Bar
viene serializzata da EF senza che io debba pensarci. L'unica cosa che devo fare è aggiungere l'attributo [SerializeColumn]
alle proprietà.
Obiettivi:
- Io non sono necessariamente in cerca di una soluzione soffiato completo (anche se avrei accettarlo), ma per una guida su dove fare un salto nel gasdotto di EF, e come farlo. OSSIA quali sono le classi EF, le configurazioni, le convenzioni, ecc. che devo tenere in considerazione?
- Desidero che le migrazioni vengano generate come ci si aspetterebbe. Il che vuol dire che non vorrei che la mia proprietà
Bar
si trasformasse in un campo "Bar_Id" che punta a una tabella "Bar". Invece voglio un campo "Barra"nvarchar(max)
che conterrà la versione serializzata di un oggettoBar
. Se questo semplicemente non è possibile, per favore dillo nella tua risposta.
Note:
- L'idea è venuta dopo aver visto il video Building Applications with Entity Framework 6 da Rowan Miller.
ComplexType
non soddisfa le mie esigenze. Ho bisogno di una serializzazione profonda e non ho bisogno di essere in grado di filtrare o ordinare su qualsiasi proprietà di ciò che è stato serializzato.- Ho in programma di serializzare con la libreria JSON di Newtonsoft, ma il modo in cui avviene la serializzazione non ha molta importanza.
qualcosa di simile? http://stackoverflow.com/questions/14779740/can-i-embemb-an-object-in-an-ef-entity-serialize-on-save-deserialize-on-access – MutantNinjaCodeMonkey
@MutantNinjaCodeMonkey L'ho fatto in il passato e funziona, ma sto cercando di rendere la persistenza totalmente trasparente. Questa è solo una proprietà 'Bar' con il mio composto' SerializeColumnAttribute', e nessuna proprietà 'BarSerialized'. –
Abbastanza sicuro che questo non è possibile in EF6. Quello di cui hai veramente bisogno è un convertitore di tipo cliente.Questa funzione è [pianificata] (https://github.com/aspnet/EntityFramework/issues/242) per EF7 ma non ancora implementata. – DavidG