Обновление объектов значения или вставка новой записи в БД - PullRequest
0 голосов
/ 21 января 2019

У меня есть билетный стол и его приемники, которые являются коллекцией.Receiver - это объект значения.

Я определил все в EF Core 2.2, и все в порядке.

При вставке нового билета получатели добавляются в тикет и сохраняются.

Для обновления тикета, поскольку объекты-значения неизменны, следует ли мне обновить таблицу приемников или вставить новые получатели?

Я имею в виду так: просто обновите измененные свойства

    public void AddOrUpdateReceiver(long? ticketId, long? referenceId, int responsibleId, int category, string note)
    {
        var existingReceiver = _receivers.FirstOrDefault(q => q.ResponsibleId == responsibleId);
        if (existingReciever == null)
        {
            var receiver = new Receiver(ticketId, referenceId, responsibleId, category, note);
            _receivers.Add(receiver);
        }
        else
        {
            existingReceiver.SetNote(note);
            existingReceiver.SetReferenceId(category);
            existingReceiver.SetCategory(category);
        }
    }

Или вот так: Вставить новую строку с новым идентификатором

    public void AddOrUpdateReceiver(long? ticketId, long? referenceId, int responsibleId, int category, string note)
    {
        var existingReceiver = _receivers.FirstOrDefault(q => q.ResponsibleId == responsibleId);
        if (existingReceiver == null)
        {
            var receiver = new Receiver(ticketId, referenceId, responsibleId, category, note);
            _receivers.Add(receiver);
        }
        else
        {
            existingReceiver = new Receiver(ticketId, referenceId, responsibleId, category, note);
        }
    }

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Если Получатель является Объектом Значения, то он должен быть неизменным. По этой причине у этого класса не должно быть тех методов установки, которые, по-видимому, будут изменять состояние объекта. Приемники могут создаваться только явно или с помощью уровня ORM, когда они запрашиваются из БД.

0 голосов
/ 21 января 2019

Я думаю, ваш код должен быть таким:

        public void AddOrUpdateReciever(long? ticketId, long? referenceId, int responsibleId, int category, string note)
    {
        var existingReciever = _recievers.FirstOrDefault(q => q.ResponsibleId == responsibleId);
        if (existingReciever == null)
        {
            existingReciever = new Reciever(ticketId, referenceId, responsibleId, category, note);
            _recievers.Add(existingReciever);
        }
        existingReciever.SetNote(note);
        existingReciever.SetReferenceId(category);
        existingReciever.SetCategory(category);
    }

Вы обновляете таблицу Receiver.

...