Я пишу консольное приложение, которое будет работать с API REST, десериализовать JSON в модель C # и затем сохранить эту модель с помощью ADO в таблице базы данных.
Первая проблема заключается в том, что во время первого запуска приложения мы обнаружили, что одно из свойств JSON превысило определение столбца nvarchar(300)
. Мы увеличили этот столбец до nvarchar(4000)
, но я понятия не имею, может ли какое-либо из других дюжин свойств строки превысить значение по умолчанию 300, которое я дал им.
К вашему сведению, ошибка SQL, которую я получил, была:
Строка или двоичные данные будут усечены.
Данные для табличного параметра "@Items" не соответствуют табличному типу параметра. Ошибка SQL Server: 8152, состояние: 10
Заявление было прекращено.
... что имеет смысл, если бы я передавал строку длиной 500 в nvarchar(300)
Итак, мое желание: во время десериализации или создания модели в C # я хотел бы обрезать строковые свойства / поля и дать им максимальную длину, прежде чем я нажму свой код персистентности, чтобы я мог на 100% быть уверенным, что мои поля никогда не будут превышать длину nvarchar и никогда не вызовет «ошибку усечения».
Я пытался использовать System.ComponentModel.DataAnnotations и [MaxLength(4000)]
, но это выглядело только для MVC и проверки ввода во время POSTing формы.
Я думал о создании резервных полей с помощью пользовательских сеттеров, но это означало, что в каждой из моих сущностей было по две строки кода. У меня есть 9 сущностей, и у каждой, вероятно, есть 2 дюжины строк, которые я хочу настроить / усечь.
Итак, вопрос: есть ли какой-нибудь причудливый способ обрезать строки, используя какую-то аннотацию данных NewtonSoft или аннотацию данных C #? Кроме того, есть ли волшебный способ избежать задних полей? Или мне просто создать собственный строковый класс и наследовать от String со свойством max length?