Domanda Esecuzione di inserti e aggiornamenti con Dapper


Sono interessato all'utilizzo di Dapper, ma da quello che posso dire supporta solo Query ed Execute. Non vedo che Dapper includa un modo di inserire e aggiornare oggetti.

Dato che il nostro progetto (la maggior parte dei progetti?) Deve fare inserimenti e aggiornamenti, qual è la migliore pratica per fare Inserti e Aggiornamenti a fianco di dapper?

Preferibilmente non dovremmo ricorrere al metodo ADO.NET per la costruzione di parametri, ecc.

La risposta migliore che riesco a fare a questo punto è usare LinqToSQL per inserti e aggiornamenti. C'è una risposta migliore?


139
2018-05-10 23:54


origine


risposte:


Stiamo cercando di creare alcuni aiutanti, decidendo ancora sulle API e se questo va avanti o meno. Vedere: https://code.google.com/archive/p/dapper-dot-net/issues/6 per il progresso.

Nel frattempo puoi fare quanto segue

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});

eccetera

Vedi anche il mio post sul blog: Quel fastidioso problema di INSERT

Aggiornare

Come sottolineato nei commenti, ora ci sono diverse estensioni disponibili nel Dapper.Contrib progetto sotto forma di questi IDbConnection metodi di estensione:

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>();

152
2018-05-11 12:45



Eseguire operazioni CRUD usando Dapper è un compito facile. Ho menzionato i seguenti esempi che dovrebbero aiutarti nelle operazioni CRUD.

Codice per CRUD:

Metodo 1: Questo metodo viene utilizzato quando si inseriscono valori da entità diverse.

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
    });
}

Metodo # 2: Questo metodo viene utilizzato quando le proprietà dell'entità hanno gli stessi nomi delle colonne SQL. Quindi, Dapper essendo un ORM mappa le proprietà dell'entità con le colonne SQL corrispondenti.

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);
}

Codice per CRUD:

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
    });
}

Codice per CRUD:

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
    });
}

Codice per CRUD:

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
    });
}

32
2017-07-03 08:09



puoi farlo in questo modo:

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
2017-07-05 07:17



utilizzando Dapper.Contrib è così semplice:

Inserisci lista:

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

Inserisci singolo:

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

Lista di aggiornamento:

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

Aggiornamento singolo:

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

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


8
2018-04-24 20:02