Я решил сохранить некоторую информацию в виде объекта JSON в базе данных SQL Server, но мне не ясно, как мне обновить одно свойство этого объекта в столбце JSON, но не весь объект.
Это основное приложение asp.net. В качестве ORM я использую ядро Entity Framework. Я хочу создать класс, который будет выглядеть следующим образом:
public class Person{
public int Id {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public string AdditionData {get;set;} //json object
}
И объект JSON в столбце «AdditionData» будет иметь следующий формат:
{
phoneNumbers:["123456789","789456123"],
groups:[{name:"g1", description:"blah"}, {name:"g2", description:"blah2"}]
}
Итак, теперь я хочу добавить новый PhoneNumber для некоторого человека, и подпись метода может выглядеть следующим образом:
void AddPhoneNumber(int personId, string phoneNumber);
Я нашел только два варианта, как я могу добавить новый phoneNumber к описанному объекту.
первый:
1) найти человека по идентификатору с помощью EF
2) десериализовать весь объект AdditionData из строки
3) добавить новый номер телефона в список дополнения Data.PhoneNumbers
4) сериализовать объект AdditionData обратно в строку
5) обновить свойство person.AdditionData этой строкой
6) выполнить «saveChanges»
второй:
используйте функцию JSON_MODIFY sql и выполните raw sql с параметром
как то так:
context.Database.ExecuteSqlCommand("UPDATE Person
SET additionalData = JSON_MODIFY(additionalData,"append $.phoneNumbers", @phoneNumber)
WHERE Id= @personId", personIdParam,phoneNumberParam);
Вопрос:
Существует ли другой способ сделать это? Потому что те два способа, которые я описал, выглядят для меня не очень элегантно (особенно первый).