繁体   English   中英

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

[英]Updating Value objects or Inserting new Record in DB

我有一个票证表及其接收者,这是一个集合。 接收者是一个价值对象。

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

或者这样:用新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);
        }
    }

我认为您的代码应如下所示:

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

您更新接收器表。

如果接收者是一个值对象,那么它应该是不可变的。 因此,该类不应具有那些可能会更改对象状态的设置方法。 从数据库查询接收器时,只能显式创建接收器,也可以由ORM层创建接收器。

暂无
暂无

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

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