C#Linq-to-SQL创建通用存储库

jim*_*jim 9 c# repository-pattern linq-to-sql

我有一些通常看起来像这样的存储库

public class DepartmentsRepository
{
    private PersonnelActionFormDataContext db = new PersonnelActionFormDataContext();

    /// <summary>
    /// returns all departments
    /// </summary>
    /// <returns>an iquerable of all departments</returns>
    public IQueryable<Department> GetAll()
    {
        return db.Departments;
    }

    /// <summary>
    /// Get department by id
    /// </summary>
    /// <param name="id">id of the department</param>
    /// <returns>a null department if nothing is found</returns>
    public Department Get(int id)
    {
        return db.Departments.SingleOrDefault(d => d.id == id);
    }

    /// <summary>
    /// Get department by department name
    /// </summary>
    /// <param name="department">name of the department</param>
    /// <returns>a null department if nothing is found</returns>
    public Department Get(string department)
    {
        return db.Departments.SingleOrDefault(d => d.DepartmentName == department);
    }

    /// <summary>
    /// Add a department
    /// </summary>
    /// <param name="department"></param>
    public void Add(Department department)
    {
        db.Departments.InsertOnSubmit(department);
    }
Run Code Online (Sandbox Code Playgroud)

我想有一些通用的基类可以节省一些打字,所以我从这里开始

 public class GenericRepository<T>
{
    private PersonnelActionFormDataContext db = new PersonnelActionFormDataContext();

    public IQueryable<T> GetAll()
    {
        return db.
    }
}
Run Code Online (Sandbox Code Playgroud)

如何访问Ts的集合以返回它们?这可能吗?

谢谢您的帮助.

Ada*_*kis 3

对于 Linq-to-SQL 这应该有效:

public IQueryable<T> GetResultL2S<T>() where T : class {
    MyDataContext db = new MyDataContext();
    return db.GetTable<T>();
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用实体框架,那么您会执行以下操作:

public IQueryable<T> GetResultEF<T>() {
    YourEntities db = new YourEntities();
    return db.CreateQuery<T>(String.Format("[{0}s]", typeof(T).Name));
}
Run Code Online (Sandbox Code Playgroud)

假设您的实体集可以通过添加 s 来实现复数。如果情况并非如此,请检查一下System.Data.Entity.Design.PluralizationServices.PluralizationService