11
votes

Une classe d'usine de référentiel

public class TreatmentRepository : IRepository<Treatment>
{
    public void Add(Treatment item)
    {
        using (PatientsDataContext dc = new PatientsDataContext())
        {
            dc.Treatments.InsertOnSubmit(item);
            dc.SubmitChanges();
        }
    }

0 commentaires

4 Réponses :


6
votes

Avoir quelque chose à retourner, vous devez écrire une classe qui implémente IRÉPOSITOIRE code>.

public class TreatmentsRepository : GeneralRepository<Treatment, PatientsDataContext>
{
    protected override Table<Treatment> GetTable(PatientsDataContext dc)
    {
        return dc.Treatments;
    }
}


3 commentaires

Je modifie la question. J'ai un contexte de données LINQTOSQL. Est-ce que c'est faisable?


@Kubi - basé sur la réponse que vous avez acceptée, je dois dire avoir aucune idée de votre question! Vous avez demandé dans votre édition sur la réalisation de "DC.ThatObject.InserSubmit (article)" C'est ce que ma mise à jour traite.


Votre réponse a été la réponse exacte pour ma question mais la réponse acceptée résout également mon problème. J'aimerais pouvoir choisir 2 réponses comme correctes.



0
votes

Vous pouvez faire sans le Enum code>. Vous avez besoin d'un type de référentiel générique ou de différents types de référentiels implémentant IRÉPOSITOIRE code>. Si vous utilisez un référentiel générique, vous pouvez implémenter l'usine en faisant quelque chose dans le sens de:

public class ObjectFactory<T>
{
    public static IRepository<T> GetRepositoryInstance()
    {
        return new Repository<T>();
    }
}


0 commentaires

13
votes

La plus simple des usines nécessite simplement que vos types dérivés d'un irpostage ont des constructeurs sans paramètre.

var treatmentRepo = 
    ObjectFactory.GetRepositoryInstance<Treatment, TreatmentRepository>();


1 commentaires

Quels sont les avantages de l'utilisation d'une usine de référentiel?



0
votes

Je vous recommanderais d'utiliser un conteneur inversion de contrôle (COI) pour cela. En usine (ou vous pouvez même aller directement au conteneur de la COI), pourrait obtenir le type. xxx

ou mieux encore, il suffit d'utiliser une méthode générique dans votre usine xxx


0 commentaires