【C#】ChatGPTを使ってDapperのコード生成を楽にする

ChatGPTを使ってコード生成の手間を減らすことができます。特に単純な作業などはミスも減り生産的なので、コーディングの際に非常に役立ちます。

今回はDapperを使う際に、面倒であった作業を楽にしてみました。

DTOクラスからDAOクラス作成を自動化

以下の様な定義のDTOがあるとします。

    public class DtoClass
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool Flg { get; set; }
        public DateTime InsertDate { get; set; }
        public DateTime UpdateDate { get; set; }
    }

ChatGPTにコードを渡して、依頼してみます。

以下のC#のDTOから、DapperでCRUD処理を行うDAOを作成してください。

以下、ChatGPTからの回答です。

以下は、Dapperを使用して上記のDTOに対してCRUD操作を行うためのDAOの例です。
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Dapper;

public class DtoClassDao
{
    private readonly string _connectionString;

    public DtoClassDao(string connectionString)
    {
        _connectionString = connectionString;
    }

    public IEnumerable<DtoClass> GetAll()
    {
        using (IDbConnection db = new SqlConnection(_connectionString))
        {
            return db.Query<DtoClass>("SELECT * FROM DtoClass");
        }
    }

    public DtoClass GetById(int id)
    {
        using (IDbConnection db = new SqlConnection(_connectionString))
        {
            return db.QueryFirstOrDefault<DtoClass>("SELECT * FROM DtoClass WHERE Id = @Id", new { Id = id });
        }
    }

    public void Insert(DtoClass dto)
    {
        using (IDbConnection db = new SqlConnection(_connectionString))
        {
            string sqlQuery = "INSERT INTO DtoClass (Name, Flg, InsertDate, UpdateDate) VALUES (@Name, @Flg, @InsertDate, @UpdateDate)";
            db.Execute(sqlQuery, dto);
        }
    }

    public void Update(DtoClass dto)
    {
        using (IDbConnection db = new SqlConnection(_connectionString))
        {
            string sqlQuery = "UPDATE DtoClass SET Name = @Name, Flg = @Flg, InsertDate = @InsertDate, UpdateDate = @UpdateDate WHERE Id = @Id";
            db.Execute(sqlQuery, dto);
        }
    }

    public void Delete(int id)
    {
        using (IDbConnection db = new SqlConnection(_connectionString))
        {
            string sqlQuery = "DELETE FROM DtoClass WHERE Id = @Id";
            db.Execute(sqlQuery, new { Id = id });
        }
    }
}
このDAOクラスを使用するには、接続文字列を指定してインスタンスを作成し、それを使用してCRUD操作を呼び出します。例えば、すべてのDTOオブジェクトを取得するには、次のようにします。
DtoClassDao dao = new DtoClassDao("connection string");
IEnumerable<DtoClass> dtos = dao.GetAll();
注意:この例は、SQL Serverを使用する場合のみ有効で、他のデータベースシステムに適応するには、接続文字列とクエリを変更する必要があります。また、エラー処理など、追加の機能が必要な場合があります。

懇切丁寧に注意書きまでしてくれます。非常に便利です。

やりたい処理とずれている場合は手修正が多少必要ですが、大枠を自動で作成してくれるため非常に生産性が高いです。

DTOからSQL文作成を自動化

SQL文作成も依頼できます。

上記のDTOから、テーブルを作成するSQL文を教えてください。
CREATE TABLE DtoClass (
    Id INT PRIMARY KEY IDENTITY(1,1),
    Name NVARCHAR(50) NOT NULL,
    Flg BIT NOT NULL,
    InsertDate DATETIME NOT NULL,
    UpdateDate DATETIME NOT NULL
)
このSQL文により、DtoClassテーブルが作成され、それぞれのカラムが定義されます。Idカラムは、IDENTITY属性を使用して自動的にインクリメントされる主キーとなります。Nameカラムは、50文字以内のUnicode文字列で、NOT NULL制約があります。Flgカラムは、ビットデータ型で、NOT NULL制約があります。InsertDateおよびUpdateDateカラムは、日時データ型で、NOT NULL制約があります。

注意:この例は、Microsoft SQL Serverを使用する場合のみ有効で、他のデータベースシステムに適応するには、テーブルの定義を変更する必要があります。また、正確なデータ型や制約は、アプリケーションの要件に合わせて変更する必要があります。

今回はIdという項目を自動で主キーと判断して、設定してくれています。事前に主キーが何かを明記しておくといいと思います。また、複合キーの場合などもあらかじめ明記してあげましょう。

また、プロパティのデータ型から列のデータ型を自動で判別してくれています。DATETIME型についてはsmalldatetimeなどに適宜修正するか、あらかじめ明記しておく必要がありますね。

このように割と大雑把なプロンプトでもChatGPT側で判断してくれます。より丁寧なプロンプトを投げかければ、自分の思ったような回答をくれます。このプロンプトをうまく考えてChatGPTと向き合うと非常に生産的に仕事ができると感じました。

Leave a Reply

Your email address will not be published. Required fields are marked *