выполнение частичного обновления базы данных с помощью dapper

c# dapper

Вопрос

Таблица базы данных пользователей (имя, фамилия, возраст и пол). Я хочу создать оператор обновления, тогда как любой из этих столбцов может быть нулевым, но не отредактированным / поступающим от какого-либо клиента. Клиент создает объект User {Name, FamilyName, Age, Sex}, он заполняет только измененные свойства, поэтому в основном я ищу способ угадать, как построить запрос и как отправить данные на него.

Я не знаю, как справиться с этой проблемой, кроме того, чтобы получить целую строку и объединить ее данные с объектом, полученным от клиента. Пока это то, что я сделал: select> merge> update.

Есть ли другой путь ?

Принятый ответ

Предположим, что ваш пользовательский класс похож на этот

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

}

(Обратите внимание на поле int, определяемое как Nullable<int> чтобы разрешить вставку нулевого значения в соответствующее поле)

Теперь ваш код, который устанавливает поля, отражающие нулевое значение для ваших нулевых свойств, может быть написан просто как нормальное обновление. Все материалы, необходимые для передачи нулевого значения в качестве параметра, выполняются внутренними элементами 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