简体   繁体   English

更新值对象或在数据库中插入新记录

[英]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. 我在EF Core 2.2中定义了所有程序,一切正常。

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 或者这样:用新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. 从数据库查询接收器时,只能显式创建接收器,也可以由ORM层创建接收器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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