Réaliser des insertions et des mises à jour avec Dapper

c# dapper orm

Question

Je suis intéressé par l'utilisation de Dapper - mais d'après ce que je peux dire, il ne supporte que Query and Execute. Je ne vois pas que Dapper inclut un moyen d'insérer et de mettre à jour des objets.

Étant donné que notre projet (la plupart des projets?) Doit faire des insertions et des mises à jour, quelle est la meilleure pratique pour réaliser des insertions et des mises à jour avec Dapper?

De préférence, nous n'aurions pas à recourir à la méthode ADO.NET de création de paramètres, etc.

La meilleure réponse que je puisse trouver à ce stade est d'utiliser LinqToSQL pour les insertions et les mises à jour. Y a-t-il une meilleure réponse?

Réponse acceptée

Nous cherchons à créer quelques assistants, en décidant toujours des API et si cela va dans le noyau ou non. Voir: https://code.google.com/archive/p/dapper-dot-net/issues/6 pour la progression.

En attendant, vous pouvez faire ce qui suit

val = "my value";
cnn.Execute("insert into Table(val) values (@val)", new {val});

cnn.Execute("update Table set val = @val where Id = @id", new {val, id = 1});

etc

Voir aussi mon article de blog: Ce problème INSERT ennuyant

Mettre à jour

Comme indiqué dans les commentaires, il existe maintenant plusieurs extensions disponibles dans le projet Dapper.Contrib sous la forme de ces méthodes d’extension IDbConnection :

T Get<T>(id);
IEnumerable<T> GetAll<T>();
int Insert<T>(T obj);
int Insert<T>(Enumerable<T> list);
bool Update<T>(T obj);
bool Update<T>(Enumerable<T> list);
bool Delete<T>(T obj);
bool Delete<T>(Enumerable<T> list);
bool DeleteAll<T>();

Réponse populaire

Effectuer des opérations CRUD en utilisant Dapper est une tâche facile. J'ai mentionné les exemples ci-dessous qui devraient vous aider dans les opérations CRUD.

Code pour C RUD:

Méthode n ° 1: cette méthode est utilisée lorsque vous insérez des valeurs de différentes entités.

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string insertQuery = @"INSERT INTO [dbo].[Customer]([FirstName], [LastName], [State], [City], [IsActive], [CreatedOn]) VALUES (@FirstName, @LastName, @State, @City, @IsActive, @CreatedOn)";

    var result = db.Execute(insertQuery, new
    {
        customerModel.FirstName,
        customerModel.LastName,
        StateModel.State,
        CityModel.City,
        isActive,
        CreatedOn = DateTime.Now
    });
}

Méthode n ° 2: Cette méthode est utilisée lorsque les propriétés de votre entité ont les mêmes noms que les colonnes SQL. Ainsi, Dapper étant un ORM mappe les propriétés d'entité avec les colonnes SQL correspondantes.

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string insertQuery = @"INSERT INTO [dbo].[Customer]([FirstName], [LastName], [State], [City], [IsActive], [CreatedOn]) VALUES (@FirstName, @LastName, @State, @City, @IsActive, @CreatedOn)";

    var result = db.Execute(insertQuery, customerViewModel);
}

Code pour C R UD:

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string selectQuery = @"SELECT * FROM [dbo].[Customer] WHERE FirstName = @FirstName";

    var result = db.Query(selectQuery, new
    {
        customerModel.FirstName
    });
}

Code pour CR U D:

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string updateQuery = @"UPDATE [dbo].[Customer] SET IsActive = @IsActive WHERE FirstName = @FirstName AND LastName = @LastName";

    var result = db.Execute(updateQuery, new
    {
        isActive,
        customerModel.FirstName,
        customerModel.LastName
    });
}

Code pour CRU D :

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string deleteQuery = @"DELETE FROM [dbo].[Customer] WHERE FirstName = @FirstName AND LastName = @LastName";

    var result = db.Execute(deleteQuery, new
    {
        customerModel.FirstName,
        customerModel.LastName
    });
}



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