dapper로 부분 데이터베이스 업데이트 수행

c# dapper

문제

주어진 데이터베이스 테이블 사용자 (이름, 성, 나이 및 성별). 나는이 열이 null이 될 수있는 반면에 update 문을 만들고 싶다. 어떤 종류의 클라이언트에서 편집되거나 / 오는 것은 아니다. 클라이언트는 개체 {Name, FamilyName, Age, Sex}를 생성합니다. 기본적으로 변경된 속성 만 채울 것이므로 기본적으로 쿼리를 작성하는 방법과 데이터를 보내는 방법을 추측 할 방법을 찾고 있습니다.

전체 행을 가져와 클라이언트에서받은 객체와 데이터를 병합하는 것 외에도이 문제를 처리하는 방법을 모르겠습니다. 지금까지 내가 한 일은 : 선택> 병합> 업데이트.

다른 방법이 있습니까?

수락 된 답변

귀하의 User 클래스가이 클래스와 비슷하다고 가정합니다.

public class User
{
    public int UserID { get; set; }
    public string Name {get; set;}
    public string FamilyName {get;set;}
    public int? Age { get; set; }
    public string Sex { get; set; }

}

(해당 필드에 Null 값을 삽입 할 수 있도록 Nullable<int> 로 정의 된 int 필드에 유의하십시오)

이제 null 속성에 대한 null 값을 반영하는 필드를 설정하는 코드를 간단히 일반 업데이트로 작성할 수 있습니다. null 값을 매개 변수로 전달하는 데 필요한 모든 작업은 Dapper 내부에서 수행합니다.

// Initialize just two fields and leave the other to their defaults
// (null for both strings and nullable ints)
User u = new User();
u.UserID = 1;
u.Name = "Steve";
bool ok = UpdateUser(u);
if(ok) ......


public UpdateUser(User info)
{
    using(SqlConnection cnn = new SqlConnection(@"Data Source=(LOCAL);
                                                Initial Catalog=TestDB;
                                                Integrated Security=True;"))
    {
        cnn.Open();

        // Prepare the parameters to pass to Dapper Execute 
        var pms = new
        {
           UserID = info.UserID   
           FirstName = info.Name,
           FamilyName = info.FamilyName,  // <- this is null
           Age = info.Age,                // <- this is null
           Sex = info.Sex                 // <- this is null
        };

        int rows = cnn.Execute(@"UPDATE [UserTable] 
                                 SET FirstName= @FirstName,
                                     LastName = @LastName, 
                                     Age = @Age, 
                                     Sex = @Sex
                                 WHERE UserID = @UserID",
                                 pms);
         return rows != 0;
    }
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow