简体   繁体   中英

Updating Value objects or Inserting new Record in DB

I have a Ticket table and its Receivers which is a collection. Receiver is a value object.

I defined all in EF Core 2.2 and everything is Okay.

When inserting a new ticket, receivers are added to ticket and would be saved.

For updating ticket, as Value Objects are Immutable, should I update the Receiver table or insert new receivers?

I mean this way : Just update Changed properties

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

Or this way : Insert new row with new Id

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

I think your code should be like this:

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

You update the Receiver table.

If a Receiver is a Value Object, then should be immutable. For this reason, that class should not have those setter methods that, presumably, will change the object state. Receivers can only be created, either explicitly or by the ORM layer when they are queried from the DB.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM