Ignorar propiedades en Dapper

dapper

Pregunta

En Dapper ( http://code.google.com/p/dapper-dot-net/ ), ¿hay alguna manera de ignorar propiedades en la clase de modelo, concretamente cuando se usa el método de extensión Insert ? Mi clase de modelo tiene un conjunto de propiedades calculadas que no se conservan en la tabla asociada.

Gracias. Pedro

Respuesta aceptada

Bueno, Dapper no tiene un método de extensión Insert , es decir, en dapper.contrib, dapper extensions o dapper rainbow.

Dapper sí mismo le permite hacer:

Animal a = new Animal {Age = 10, Family = "Canine"}
// only insert Age
cnn.Execute("insert Animal(Age) values (@Age)", a); 

Para evitar algunas de las clases de extensión que a veces puede hacer:

cnn.InsertExtension("Animal", new{a.Age});

De todos modos, siempre puede recurrir a Dapper sin procesar para sus inserciones filtradas complejas.


Respuesta popular

Si está utilizando Dapper.Contrib, consulte este código en SqlMapperExtensions:

https://github.com/StackExchange/dapper-dot-net/blob/master/Dapper.Contrib/SqlMapperExtensions.cs#L54-L66

        private static List<PropertyInfo> ComputedPropertiesCache(Type type)
        {
            //...
            var computedProperties = TypePropertiesCache(type).Where(p => p.GetCustomAttributes(true).Any(a => a is ComputedAttribute)).ToList();

y https://github.com/StackExchange/dapper-dot-net/blob/master/Dapper.Contrib/SqlMapperExtensions.Async.cs#L147-L165

        var computedProperties = ComputedPropertiesCache(type);
        var allPropertiesExceptKeyAndComputed = allProperties.Except(keyProperties.Union(computedProperties)).ToList();
        //...
        for (var i = 0; i < allPropertiesExceptKeyAndComputed.Count; i++)
        {
            //...

Entonces, si agrega un atributo ComputedAttribute a sus propiedades en su clase, ¡Dapper.Contrib no intentará insertarlas en la base de datos! No debería preocuparse por hacer que Dapper ignore esas propiedades, solo Dapper.Contrib. Porque si usa select * from tablename en sus consultas apresuradas, solo intentará asignar columnas que existan. Entonces, simplemente no crea columnas para las propiedades que marcó como [Computed] .



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué