Dapper 및 Oracle CRUD 문제, 방법

c#-4.0 crud dapper

문제

Dapper.NET을 사용하여 Oracle DB를 CRUD하는 방법은 무엇입니까?

나는 테이블 이름을 가지고 : PLAYER_LOG 그것 신원은 트리거에 의해 이루어집니다, 여기에 SQL입니다

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

내 모델은 :

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

여기 내 삽입입니다 :

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

다음은 예외입니다.

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

수락 된 답변

나는 비슷한 것을 봤지만 돌아 오는 말을 사용했다. 내가 발견 한 트릭은 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
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.