Sto usando EF (prima Code) e vorrei isolare le proprietà dai metodi (molti dei metodi fanno riferimento ad altre librerie che non voglio che il mio progetto di database debba fare riferimento).
Ad esempio, supponiamo di avere questa classe
public class Person
{
public string Name { get; set; }
public void SayName()
{
SomeExternalAssembly.Say(Name)
}
}
Perché SomeExternalAssembly
non ha nulla a che fare con il database Mi piacerebbe spostare il metodo SayName
su un altro assembly mantenendolo in una "versione" di Person
.
Nel mio mondo ideale (che non funziona ed è probabilmente una cattiva idea) erediterei Person
in DerivedPerson
e poi lo rimando a Person
quando ho bisogno di salvarlo nel DB. Mentre posso eseguire il cast, quando tento di aggiungerlo al DB, ottengo un System.InvalidOperationException: Mapping and meta data information could not be found for EntityType 'DerivedPerson'
.
Poiché non ha funzionato, la soluzione migliore che riesco a fare è aggiungere una proprietà Person
alla mia nuova classe:
public class PersonB
{
public Person Data;
public void SayName()
{
SomeExternalAssembly.Say(Data.Name)
}
}
Mentre funzionerebbe, sto cercando qualcosa di un po 'più pulito (e idealmente meno modifiche al codice). Il prossimo pensiero che ho avuto è stato quello di andare con l'ereditare, quindi aggiungere un metodo di conversione utilizzando la riflessione.
Qualcuno ha un approccio migliore?