Доступ к параметру известного класса, названному в честь общего класса - PullRequest
1 голос
/ 16 ноября 2009

Я пытаюсь создать общий базовый репозиторий для моих сущностей Linq2Sql. Я хотел бы реализовать общий метод FindAll () следующим образом.

class BaseRepository<T> : IBaseRepository<T>
{
    private readonly FooDataContext _ctx = new FooDataContext();

    public IQueryable<T> FindAll()
    {
        return _ctx.T;
    }

    public void Add(T entity)
    {
        _ctx.T.InsertOnSubmit(entity);
    }

    public void Save()
    {
        _ctx.SubmitChanges();
    }
}

Есть ли способ сделать это без использования отражения и создать замедление, которое сделает его практически бесполезным?

Ответы [ 3 ]

2 голосов
/ 16 ноября 2009

DataContext уже содержит то, что вам нужно.

public IQueryable<T> FindAll()
{
    return _ctx.GetTable<T>();
}

public void Add(T entity)
{
    _ctx.GetTable<T>().InsertOnSubmit(entity);
}
0 голосов
/ 16 ноября 2009

Это должно работать:

public IQueryable<T> FindAll()
{
    return _ctx.GetTable<T>();
}
0 голосов
/ 16 ноября 2009

Если вы используете систему хранения в памяти для кэширования отраженных атрибутов определенного типа после первого использования, у вас может не возникнуть «практически бесполезной» ситуации. На самом деле, без тестирования вы не знаете, что решение с отражением будет проблемой, не так ли? (Большая часть .NET использует рефлексию, и люди не видят замедления в этих сценариях. Сериализация - один из них.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...