2009-03-12 6 views
1

J'ai une classe de base du référentiel qui est appelé de mes contrôleurs dans mon application mvcLinq 2 SQL - Une meilleure façon de le faire

Chaque contrôleur, il obtient propre référentiel

comme celui-ci

public class ServiceRepository : Bluegrass.Mvc.RepositoryBase<Models.Service> 
{ 
    public ServiceRepository() 
    { 
     this._db = new iSppms.Models.iSppmsDataContext(); 
    } 
} 

Et comme se habituera

internal DataAccess.ServiceRepository repository = 
     new iSppms.DataAccess.ServiceRepository(); 
    public ActionResult Index() 
    { 
     var viewData = new ViewData.ServiceIndexViewData(
      repository.GetItems<Models.Service>()); 
     return View(viewData); 
    } 

Là où je suis désireux de faire est de ne pas avoir passer le modèle à travers comme RepositoryBase déjà de type Models.Service

Je suis à la recherche d'une meilleure façon de structurer ce sujet.

public class RepositoryBase<T> where T : class 
{ 
    public DataContext _db; 

    public List<T> GetItems<T>() where T : class, Interfaces.IModel 
    { 
     var table = _db.GetTable<T>(); 
     var data = table.Where(t => !t.Deleted); 

     return data.ToList(); 
    } 

Répondre

1

Pouvez-vous ajouter le bit IModel-RepositoryBase<T> et faire GetItems<T> non générique? Remarque: il est déjà une mauvaise idée de réutiliser le T symbole générique (ce qui est différent en GetItems):

public class RepositoryBase<T> where T : class, Interfaces.IModel 
{ 
    public DataContext _db; 

    public List<T> GetItems() 
    { 
     var table = _db.GetTable<T>(); 
     var data = table.Where(t => !t.Deleted); 

     return data.ToList(); 
    } 
} 
Questions connexes