Petapoco e ignorar el atributo
Pregunta
Tengo la siguiente clase:
public class Foo
{
public int Id { get; set; }
...
public Boo Boo1 { get; set; }
public Boo Boo2 { get; set; }
}
Quiero excluir las propiedades Boo1
y Boo2
, pero no quiero decorar esas propiedades con el atributo PetaPoco.Ignore
.Quiero tener objetos pecosos puros.¿Puedo ejecutar el comando Ignore
en el código o tengo que crear un procedimiento de consulta / almacenamiento y mapear manualmente todos los campos?
¡Cualquier ayuda sería muy apreciada!
Solución
Parece que Petapoco no se puede decir de ninguna otra manera que los campos / propiedades sean ignorados que mediante el uso de atributos.Puede ignorar a algunos miembros, o si no está asignando la mayoría de una clase, puede especificar la asignación explícita de columnas para la clase y decorar los que desea asignar.Entiendo su vacunanza para agregar a un cruft específico de ORM a un POCO "puro", pero desafortunadamente esa información tiene que estar en alguna parte, y como Petapoco no usa archivos de mapeo (o gran parte de una configuración en absoluto), la clase esdonde va.
Lo único que podría hacer es crear una DTO / DAO que será lo que se asigna, luego cree operadores implícitos o explícitos para convertir entre la clase de dominio y su DTO.La ODT, entonces, simplemente no puede tener los campos que no desea incluir.Que mantiene ambas clases POCO (dependiendo de sus sentimientos con respecto a los métodos del operador), y simplemente agrega un paso relativamente simple de lanzar el resultado de la consulta a su clase de dominio.
Otros consejos
en mi rama aquí: https://github.com/schotime/petapoco
Puede describir con fluidez sus modelos como si hubiera descrito aquí: http://schotime.net/blog/index.php/2011/05/16/fluent-petapoco-external-mappings/ y también use el mapeo basado en la convención como aquí: http://schotime.net/blog/index.php / 2012/ 02/13 / Petapoco-Convención - Mapeo fluido-fluido /
Este es un gran lugar para un tipo anónimo.
en su método para guardar foo
public void InsertFoo(Foo f)
{
var db = new Database("connection");
var petaPocoFooObj = new {f.Id}
db.Insert("FooTable", "FooId", petaPocoFooObj);
}
Es solo un poco más de trabajo, aunque podría ser una pita si sus clases están profundamente anidadas.