DapperとOracle CRUDの問題、方法

c#-4.0 crud dapper

質問

Dapper.NETをOracle DBにCRUDするにはどうすればよいですか?

私はテーブルの名前を持っている: PLAYER_LOGそれはアイデンティティがトリガーによって行われ、ここではSQL

SELECT SQ_MASTER_SEQUENCE.NEXTVAL INTO tmpVar FROM dual;
:NEW.ID := tmpVar;

私のモデルは:

public class PlayerLogStorage : IEntity //-> here is the identity
{       
    public string Cli { get; set; }
    public string PlayerAnswer { get; set; }
    public DateTime InsertDate { get; set; }
}

ここに私の挿入です:

 using (IDbConnection ctx = DbConnectionProvider.Instance.Connection)
 {
            ctx.Query<PlayerLogStorage>("INSERT INTO PLAYER_LOG (CLI, ANSWER, INSERT_DATE) VALUES (:Cli, :PlayerAnswer, :InsertDate)", new
            {
                Cli = model.Cli,
                PlayerAnswer = model.PlayerAnswer,
                InsertDate = model.InsertDate
            });
 }

ここでは例外です:

ORA-01008: not all variables bound

受け入れられた回答

私は少し似たようなものに遭遇しましたが、復帰する声明を使用しました。私が見つけたトリックは、DynamicParametersオブジェクトを使用することでした。私が使っているシステムでは、挿入文はシーケンス上でNextValを呼び出さなければなりません。それはトリガーにはありません。

var param = new DynamicParameters();

param.Add(name: "Cli", value: model.Cli, direction: ParameterDirection.Input);
param.Add(name: "PlayerAnswer", value: model.PlayerAnswer, direction: ParameterDirection.Input);
param.Add(name: "InsertDate", value: model.InsertDate, direction: ParameterDirection.Input);
param.Add(name: "Id", dbType: DbType.Int32, direction: ParameterDirection.Output);

using (IDbConnection ctx = DbConnectionProvider.Instance.Connection)
{
    ctx.Execute("INSERT INTO PLAYER_LOG (CLI, ANSWER, INSERT_DATE) VALUES (:Cli, :PlayerAnswer, :InsertDate) returning Id into :Id", paramList);
}

var Id = param.get<int>("Id");

人気のある回答

bwalk2895の答えに加えて、モデルオブジェクトをDynamicParametersのコンストラクタに渡すこともできます。出力パラメータを追加するだけです。特に数多くのプロパティを持つオブジェクトの場合、数行のコードを保存します。例:

var param = new DynamicParameters(model);

param.Add(name: "Id", dbType: DbType.Int32, direction: ParameterDirection.Output);

using (IDbConnection ctx = DbConnectionProvider.Instance.Connection)
{
    ctx.Execute("INSERT INTO PLAYER_LOG (CLI, ANSWER, INSERT_DATE) VALUES (:Cli, :PlayerAnswer, :InsertDate) returning Id into :Id", param);
}

var Id = param.Get<int>("Id");

更新:修正されたメソッド名



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow