2011-06-16 3 views
12

J'essaie de groapper Dapper et semble manquer quelque chose de très fondamental, quelqu'un peut-il expliquer le code suivant tiré de la page d'accueil Dapper sur le code Google et expliquer pourquoi il n'y a pas de clause From, et le deuxième param à la méthode de requête (dynamique) est passé un type anonyme, je suppose que cela est en quelque sorte la configuration d'un objet de commande, mais voudrais une explication dans la terminologie mortelle simple.Clarification de Dapper Exemple Code

Merci, Stephen

public class Dog {  
    public int? Age { get; set; }  
    public Guid Id { get; set; }  
    public string Name { get; set; }  
    public float? Weight { get; set; }  
    public int IgnoredProperty { 
     get { return 1; } 
    } 
} 

var guid = Guid.NewGuid(); 
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });    

dog.Count().IsEqualTo(1); 
dog.First().Age.IsNull(); 
dog.First().Id.IsEqualTo(guid); 
+0

Je suis sur le point d'avoir une question sur Dapper aussi. J'essaie de comprendre comment envoyer un tableau TEntity [] entièrement rempli à la fonction Execute. Regarder pour voir si Marc met sa tête dans la porte ... – IAbstract

+0

@Abstract: Pourquoi ne poses-tu pas ta propre question alors? –

+0

@Robert: Je vais ... quand/si je ne peux pas comprendre. C'était juste un commentaire ... voir mon commentaire sous la réponse :) – IAbstract

Répondre

11

Les deux premiers exemples qui viennent ne font aucun accès aux données « réel », sans doute pour les garder simple.
Oui, une connexion est utilisée (connection.Query(...)), mais uniquement parce que c'est la seule façon d'appeler les méthodes de Dapper (car elles étendent l'interface IDbConnection).

Quelque chose comme cela est parfaitement valide dans le code SQL:

select 'foo', 1 

... il ne vient « générer » son résultat à la volée, sans sélectionner quoi que ce soit à partir d'une table.

L'exemple avec les paramètres et le type anonyme:

var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });)

... juste montre la capacité de Dapper to submit SQL parameters in the form of an anonymous type.
Encore une fois, la requête ne sélectionne réellement rien d'une table, probablement afin de le garder simple.

+0

Merci Christian. Je dois également supposer que parce qu'ils utilisent le signe @ que c'est le dialecte de SQL Server? Devrais-je remplacer le @ par: pour Oracle? –

+0

Désolé, je sur-lu le fait que vous utilisez Oracle (j'utilise SQL Server, et ne sais pas Oracle). Oui, "@" indique un paramètre SQL. Comme Dapper lui-même est complètement indépendant de la base de données (http://code.google.com/p/dapper-dot-net/#Will_dapper_work_with_my_db_provider), vous devrez utiliser l'équivalent Oracle de "@". –

+0

+1: bonne information ... Et pour MySql, je remplacerais le '@' par '?' n'est-ce pas? – IAbstract