0

我仍然在这里学习并且对子收藏有疑问。我有一个名为 Audio 的聚合根,它有一个 AudioDownloads 的集合。

下载是下载音频的每个 IP 地址的记录,我不希望每个音频都有相同 IP 的重复记录。

在我的域中,我具有以下功能:

 public virtual void Add(AudioDownload download)
    {
        if (!AudioDownloads.Contains(download)) {
            TotalDownloads++;
            AudioDownloads.Add(download);
        }
    }

这就是我调用 Add 函数的方式:

var download = new AudioDownload();
audio.Add(download);

这将从数据库中返回此音频的所有下载(应该是数千个!),即使已经存在下载,它仍在添加下载。

我使用 S#arp 和 DomainSignature 方法来比较我的实体。

这是我的域:

public class AudioDownload : Entity, ITenantSpecific
{
    public AudioDownload() { DateAdded = DateTime.Now; }

    [DomainSignature]
    public virtual Audio Audio { get; set; }

    [DomainSignature]
    public virtual string Ip { get; set; }

    public virtual DateTime DateAdded { get; set; }
}

我的问题是......即使我可以让 AudioDownloads 不添加重复条目,我应该这样做吗?

非常感谢你!

保罗

4

1 回答 1

1

我希望执行此操作的大多数方法总是会导致您从数据库中查询所有下载,这可能不是您想要的。

另一种可能更便宜的方法是在基于 AudioId 和 Ip 定义的数据库中拥有一个唯一键。如果您随后插入与这些重复的记录,您将从 NHibernate 收到一个异常,告诉您违反了唯一键:优雅地处理该异常(即不要将其显示为错误,加载现有的 AudioDownload 并在将来使用它)和你会实现你的目标,我相信。

当你使用这种方法时,不要检查下载是否已经包含在集合中,因为这仍然会触发所有记录的加载。

另一方面:看到从同一个IP多次下载某些东西会不会很有趣?

于 2009-12-17T15:35:25.673 回答