我还在这里学习并对孩子收藏有疑问。我有一个名为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不添加重复的条目,我应该这样做吗?
非常感谢!
保
答案 0 :(得分:1)
我希望大多数方法可以让您查询数据库中的所有下载,这可能不是您想要的。
另一种可能更便宜的方法就是在基于AudioId和Ip定义的数据库中拥有唯一的密钥。如果你然后插入一个复制这些的记录,你将从NHibernate得到一个异常,告诉你一个唯一的密钥被违反:正常处理该异常(即不要将其显示为错误,加载现有的AudioDownload并在将来使用它)和我相信你会实现你的目标。
当您使用此方法时,请不要检查下载是否已包含在集合中,因为这仍然会触发加载所有记录。
另一方面:看到多次从同一个Ip下载的内容会不会很有趣?