Ignorer les propriétés dans Dapper

dapper

Question

Dans Dapper ( http://code.google.com/p/dapper-dot-net/ ), existe-t-il un moyen d'ignorer les propriétés dans la classe de modèle, à savoir lors de l'utilisation de la méthode d'extension Insert ? Ma classe de modèle possède un ensemble de propriétés calculées qui ne sont pas conservées dans la table associée.

Merci. Pedro

Réponse acceptée

Eh bien, Dapper n'a pas de méthode d'extension Insert , c'est-à-dire dans dapper.contrib, les extensions Dapper ou Dapper Rainbow.

Dapper lui-même vous permet de faire:

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

Pour contourner certaines des classes d'extension, vous pouvez parfois faire:

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

Quoi qu'il en soit, vous pouvez toujours utiliser Dapper brut pour vos insertions filtrées complexes.


Réponse populaire

Si vous utilisez Dapper.Contrib, consultez ce code dans 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();

et 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++)
        {
            //...

Donc, si vous ajoutez un ComputedAttribute à vos propriétés sur votre classe, Dapper.Contrib n'essaiera pas de les insérer dans la base de données! Vous ne devriez pas avoir à vous soucier d'obtenir Dapper pour ignorer ces propriétés, seulement Dapper.Contrib. Parce que si vous utilisez select * from tablename dans vos requêtes dapper, il essaiera seulement de mapper les colonnes existantes. Donc, vous ne créez pas de colonnes pour les propriétés que vous avez marquées comme [Computed] .




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi