Dapperでの挿入と更新の実行

c# dapper orm

質問

私はDapperの使用に興味がありますが、私はそれがクエリと実行のみをサポートしていると言えます。私はDapperにオブジェクトの挿入と更新の方法が含まれているとは思わない。

私たちのプロジェクト(ほとんどのプロジェクト?)が挿入と更新を行う必要があることを考えれば、挿入ツールと更新プログラムをDapperとともに実行するベストプラクティスは何ですか?

好ましくは、パラメータ構築などのADO.NETメソッドに頼る必要はありません。

この時点で私が思いつく最善の答えは、挿入と更新にLinqToSQLを使うことです。より良い答えはありますか?

受け入れられた回答

私たちはいくつかのヘルパーを構築し、まだAPIを決定し、それがコアになるかどうかを検討しています。進行状況についてはhttps://code.google.com/archive/p/dapper-dot-net/issues/6ご覧ください

その間、次のことができます

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

私のブログの記事も見てください: その厄介なINSERTの問題

更新

コメントで指摘されているように、これらのIDbConnection拡張メソッドの形でDapper.Contribプロジェクトで利用できるいくつかの拡張があります:

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

人気のある回答

Dapperを使用してCRUD操作を実行するのは簡単な作業です。私はCRUD操作であなたを助けるべきである以下の例を挙げました。

C RUDのコード:

メソッド#1:このメソッドは、異なるエンティティから値を挿入する場合に使用されます。

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

メソッド#2:このメソッドは、エンティティプロパティの名前がSQLカラムと同じ場合に使用されます。したがって、ORMであるDapperは、一致するSQLカラムとエンティティプロパティをマッピングします。

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

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

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

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


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ