Linq 2 SQL - 一种更好的方法

时间:2009-03-12 10:49:27

标签: c# generics

我有一个存储库基类,可以从我的mvc应用程序中的控制器调用

每个控制器都有自己的存储库

像这样

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

并像

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

我想要做的就是不必通过模型,因为RepositoryBase已经是Models.Service类型

我正在寻找一种更好的方法来构建它。

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

2 个答案:

答案 0 :(得分:1)

您可以将IModel位添加到RepositoryBase<T>,并使GetItems<T>非通用吗?注意:重新使用通用令牌TGetItems不同)已经是一个坏主意:

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

答案 1 :(得分:0)

也许这篇Repository Base Class文章有帮助吗?