NHibernate域模型 - 将子对象添加到集合

时间:2009-12-17 15:13:06

标签: nhibernate contains

我还在这里学习并对孩子收藏有疑问。我有一个名为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);

这将返回此音频数据库的所有下载(可能数千!),即使已经存在,它仍然会添加下载。

我正在使用带有DomainSignature方法的S#arp来比较我的实体。

这是我的域名:

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不添加重复的条目,我应该这样做吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

我希望大多数方法可以让您查询数据库中的所有下载,这可能不是您想要的。

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

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

另一方面:看到多次从同一个Ip下载的内容会不会很有趣?