Использование HasDefaultValueSql для создания GUID, когда это необязательно в DTO, но требуется в базе данных.C#

Место общения программистов C#
Ответить
Anonymous
 Использование HasDefaultValueSql для создания GUID, когда это необязательно в DTO, но требуется в базе данных.

Сообщение Anonymous »

У меня есть свойство, объявленное как таковое в DTO (объект, полученный из внешнего интерфейса), и я пытаюсь использовать HasDefaultValueSql, но всегда получаю пустые идентификаторы вместо допустимых. >
Вот настройка

Код: Выделить всё

class CarDto
{
public Guid? Id { get; init; }
}
Я объявляю его нулевым, потому что, когда клиент создает объект, идентификатор будет либо отсутствовать, либо иметь значение NULL, либо пустая строка, поэтому серверная часть сама генерирует идентификатор. >
Если я не объявлю его допускающим значение NULL, процесс сериализации завершится неудачей.

Значение JSON не может быть преобразовано в System. Руководство. Путь: $.id

Затем я настрою объект как объект EF как таковой

Код: Выделить всё

class Car
{
public Guid Id { get; set; }
}
Затем в OnModelCreating моего контекста я настраиваю свойство:

Код: Выделить всё

modelBuilder.Entity()
.Property(e => e.Id)
.HasDefaultValueSql("NEWID()");
Проблема в том, что когда я конвертирую DTO в объект базы данных, Id становится пустым GUID (

Код: Выделить всё

00000000-0000-0000-0000-000000000000
), поскольку на данный момент оно не может быть обнулено.

Код: Выделить всё

var carToCreate = mapper.Map(carDto);
//carToCreate.Id becomes empty guid, not a null.
Я думаю, именно поэтому HasDefaultValueSql не имеет никакого эффекта, поскольку есть значение, поэтому нет необходимости указывать значение по умолчанию.
Как это вообще может работать? Кажется достаточно простым, но это ускользает от меня.


Подробнее здесь: https://stackoverflow.com/questions/792 ... but-requir
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»