我有一个票证表及其接收者,这是一个集合。接收者是一个价值对象。
我在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);
}
}
答案 0 :(得分:0)
我认为您的代码应如下所示:
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表。
答案 1 :(得分:0)
如果接收者是一个值对象,那么它应该是不可变的。 因此,该类不应具有那些可能会更改对象状态的设置方法。 从数据库查询接收器时,只能显式创建接收器,也可以由ORM层创建接收器。