我正在尝试使用 NHibernate 将收到的消息存储在数据库中。但是,有可能两次收到相同的消息,在这种情况下,我不想将副本保存在数据库中。我的第一个想法是执行以下操作:
// in SaveRange(IEnumerable<Message> messages
var alreadyStoredMessages = session.Query<Message>().Intersect(messages);
var newMessages = messages.Except(alreadyStoredMessages);
但是,NHibernate 似乎不支持 Intersect 所以这将导致异常。我知道我总是可以获取所有消息,将它们转换为列表或数组,然后进行相交,但这不会很有效。
Message 类实现了 IEquatable,它还覆盖了 GetHashCode() 和 Equals(object obj)。相等性取决于几个属性(时间戳、几个字符串等)。