Effectuer des Inserts et des mises à jour avec Dapper

je suis intéressé par l'utilisation de Dapper - mais d'après ce que je peux dire, il ne supporte que la requête et L'exécution. Je ne vois pas que Dapper inclut une façon d'insérer et de mettre à jour des objets.

étant donné que notre projet (la plupart des projets?) besoin de faire des inserts et des mises à jour, Quelle est la meilleure pratique pour faire des Inserts et des mises à jour aux côtés de dapper?

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

la meilleure réponse que je puisse trouver à ce stade est D'utiliser LinqToSQL pour les inserts et les mises à jour. Est-il une meilleure solution?

143
demandé sur Slaggg 2011-05-11 03:54:29

5 réponses

nous cherchons à construire quelques assistants, encore en train de décider sur les API et si cela va dans le noyau ou non. Voir: https://code.google.com/archive/p/dapper-dot-net/issues/6 pour progrès.

entre-temps, 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});

etcetera

Voir Aussi mon billet de blog: ce problème d'insertion ennuyeux

mise à Jour

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

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>();
157
répondu Sam Saffron 2018-05-25 17:35:08

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 #1: cette méthode est utilisée lorsque vous insérez des valeurs provenant 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 #2: cette méthode est utilisée lorsque les biens de votre entité ont les mêmes noms comme les colonnes SQL. Donc, Dapper étant un ORM maps entity properties 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
    });
}
35
répondu Reyan Chougle 2017-07-19 13:20:34

vous pouvez le faire de cette manière:

sqlConnection.Open();

string sqlQuery = "INSERT INTO [dbo].[Customer]([FirstName],[LastName],[Address],[City]) VALUES (@FirstName,@LastName,@Address,@City)";
sqlConnection.Execute(sqlQuery,
    new
    {
        customerEntity.FirstName,
        customerEntity.LastName,
        customerEntity.Address,
        customerEntity.City
    });

sqlConnection.Close();
22
répondu Dana Addler 2012-04-17 19:53:04

Utilisant Dapper.Contrib c'est aussi simple que cela:

ajouter la liste:

public int Insert(IEnumerable<YourClass> yourClass)
{
    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();
        return conn.Insert(yourClass) ;
    }
}

insérer simple:

public int Insert(YourClass yourClass)
{
    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();
        return conn.Insert(yourClass) ;
    }
}

mise à Jour de la liste:

public bool Update(IEnumerable<YourClass> yourClass)
{
    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();
        return conn.Update(yourClass) ;
    }
}

mise à Jour unique:

public bool Update(YourClass yourClass)
{
    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();
        return conn.Update(yourClass) ;
    }
}

Source: https://github.com/StackExchange/Dapper/tree/master/Dapper.Contrib

8
répondu Ogglas 2017-06-12 05:32:56

Vous pouvez essayer ceci:

 string sql = "UPDATE Customer SET City = @City WHERE CustomerId = @CustomerId";             
 conn.Execute(sql, customerEntity);
0
répondu Luiz F C Leite 2018-09-25 16:57:55