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?
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>();
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
});
}
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();
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
Vous pouvez essayer ceci:
string sql = "UPDATE Customer SET City = @City WHERE CustomerId = @CustomerId";
conn.Execute(sql, customerEntity);