Domanda
Ho la seguente classe:
public class Foo
{
public int Id { get; set; }
...
public Boo Boo1 { get; set; }
public Boo Boo2 { get; set; }
}
.
Voglio escludere le proprietà Boo1
e Boo2
Proprietà ma non voglio decorare quelle proprietà con Attributo PetaPoco.Ignore
.Voglio avere oggetti puri Poco.Posso eseguire il comando Ignore
nel codice o devo creare una procedura di query / memorizzata e mappare manualmente tutti i campi?
Qualsiasi aiuto sarebbe molto apprezzato!
Soluzione
Sembra che Petapoco non possa essere detto in qualsiasi altro modo che i campi / proprietà devono essere ignorati rispetto agli attributi.Puoi ignorare alcuni membri, o se non stai mappando la maggior parte di una classe, puoi specificare la mappatura della colonna esplicita per la classe e decorare quelle che vuoi mappati.Capisco la tua esitanza ad aggiungere cruft o specifico di Orm a un Poco "puro", ma sfortunatamente che le informazioni devono essere da qualche parte, e poiché Petapoco non utilizza i file di mappatura (o molto di una configurazione, davvero), la classe èdove va.
L'unica cosa che potresti fare è creare un DTO / DAO che sarà ciò che è mappato, quindi creare operatori impliciti o espliciti da convertire tra la classe di dominio e il suo DTO.La Dto, quindi, non può semplicemente non avere i campi che non vuoi includere.Ciò mantiene entrambe le classi Poco (a seconda dei tuoi sentimenti riguardanti i metodi dell'operatore), e aggiunge solo una fase relativamente semplice di lanciare il risultato della query alla tua classe di dominio.
Altri suggerimenti
Nel mio ramo qui: https://github.com/schotime/PetApoco
Puoi descrivere fluentemente i tuoi modelli come ho descritto qui: http://schotime.net/blog/index.php/2011/05/16/FFUENT-PAPOCO-EXTERNAL-Mappings/ e usa anche la mappatura basata sulla convenzione come qui: http://schotime.net/blog/index.php / 2012 / 02/13 / PETAPOCO-BASATO-BASE-BUFENT-MAPPING /
Questo è un ottimo posto per un tipo anonimo.
nel tuo metodo per salvare foo
public void InsertFoo(Foo f)
{
var db = new Database("connection");
var petaPocoFooObj = new {f.Id}
db.Insert("FooTable", "FooId", petaPocoFooObj);
}
.
È solo un po 'più di lavoro, anche se potrebbe essere una pita se le tue lezioni sono profondamente annidate.