Mapper deux objets dans une requête de mise à jour

dapper

Question

Dapper est capable de mapper cette requête à l'objet car . Il sait quelle propriété dans la voiture va à quelle variable dans la requête.

Car car = new Car();
conn.Execute(
      "UPDATE CAR" +
      " SET COLOR=@Color,MODEL=@Model" +
      " WHERE ID=@Id", car;

Mais puis-je ajouter une autre variable à la requête? Par exemple:

int c = 1000; 
conn.Execute(
      "UPDATE CAR" +
      " SET COLOR=@Color,MODEL=@Model,COST=@cost" +
      " WHERE ID=@Id", car, new { cost = c };

Je voudrais faire cela sans avoir à faire correspondre chaque propriété dans l'objet de voiture à une variable dans la requête. Voici la classe exemple, mais j'ai beaucoup plus de propriétés dans ma classe réelle.

public class Car {
    public int Id { get; set; }
    public string Color { get; set; }
    public string Model { get; set; }
}

Réponse acceptée

Il pourrait y avoir une meilleure réponse mais cela a fonctionné pour l'instant:

int c = 1000; 
conn.Execute(
      "UPDATE CAR" +
      " SET COLOR=@Color,MODEL=@Model,COST=" + c +
      " WHERE ID=@Id", car;

Réponse populaire

Je crée généralement une nouvelle dynamique pour tous les paramètres. Par exemple:

var car = new Car();
car.Color = "Black";
car.Model = "BMW";
car.Id = 123;
var cost = 53000

DbConnection.Execute(@"update car set color=@color, model = @model, cost = @cost where id = @id",
                new { color = car.Color, model = car.Model, cost = cost, id=car.Id});

De cette façon, vous pouvez assembler la dynamique à partir de plusieurs objets / variables.



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