Question

Je suis encore à apprendre ici et avez une question sur les collections d'enfants. J'ai une racine globale appelée Audio, qui a une collection de AudioDownloads.

Les téléchargements sont des enregistrements de chaque adresse IP qui télécharge l'audio, je ne veux pas avoir des enregistrements en double de la même adresse IP pour chaque audio.

Dans mon domaine, j'ai la fonction suivante:

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

Et voilà comment je suis appeler la fonction Ajouter:

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

retourne tous les téléchargements de la base de données pour ce Audio (qui chould être des milliers!), Aussi il est encore ajouter le téléchargement, même si il en existe déjà.

J'utilise S # arp avec l'approche DomainSignature pour comparer mes entités.

Voici mon domaine:

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; }
}

Ma question est ... même si je peux obtenir AudioDownloads ne pas ajouter des entrées en double, dois-je faire de cette façon du tout?

Merci beaucoup!

Paul

Était-ce utile?

La solution

Je pense que la plupart des façons de le faire vous conduira toujours à interroger tous les téléchargements de la base de données, ce qui est probablement pas ce que vous voulez.

Une autre approche qui pourrait être moins cher est juste d'avoir une clé unique dans la base de données définie sur la base AudioID et Ip. Si vous insérez ensuite un enregistrement qui fait double emploi avec ceux-ci, vous obtiendrez une exception de NHibernate vous dire a été violé une clé unique: gérer cette exception grâce (ne le montre pas comme une erreur, chargez le AudioDownload existant et l'utiliser à l'avenir) et vous aurez atteint votre objectif, je crois.

Lorsque vous utilisez cette approche ne vérifie pas si le téléchargement est déjà dans la collection, car cela encore déclencher le chargement de tous les enregistrements.

D'autre part: ne serait-il pas intéressant de voir que quelque chose a été téléchargé à partir des mêmes plusieurs fois Ip?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top