нужно выяснить Т класса репозитория для - PullRequest
0 голосов
/ 27 апреля 2011

У меня есть класс Repository, и на основе T я хочу создать набор объектов для типа T..в моем конструкторе ... это то, что у меня есть до сих пор ..

public static class Repository<T> : IDisposable
    where T : class
{
    private DeltaDBEntities context;
    private ObjectSet<T> objectset;
    public Repository()
    {
        this.context =  new DeltaDBEntities();
        switch
        {
            case T = typeof(ViewModels.Company):
                this.objectset = context.Companies;
                break;
        }

        this.objectset = context.Set
    }

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Если ваш DeltaDBEntities наследуется от ObjectContext, вы можете использовать его обобщенный метод CreateObjectSet<T>().

public class Repository<T> where T : class
{
    private DeltaDBEntities context;
    private ObjectSet<T> objectset;

    public Repository()
    {
        this.context = new DeltaDBEntities();
        this.objectset = context.CreateObjectSet<T>();
    }
}
0 голосов
/ 27 апреля 2011

Не уверен, что вы пытаетесь достичь и почему вы используете дженерики для чего-то, что не известно во время компиляции, но вы можете попробовать следующее:

public class Repository<T> : IDisposable where T : class
{
    private DeltaDBEntities context;
    private ObjectSet<T> objectset;

    public Repository()
    {
        this.context = new DeltaDBEntities();
        if (typeof(T) == typeof(ViewModels.Company))
        {
            this.objectset = context.Companies;
        }
        else if (typeof(T) == typeof(ViewModels.SomeOtherClass))
        {
            this.objectset = context.SomethingElse;
        }
        else
        {
            this.objectset = context.Set;
        }
    }

    public void Dispose()
    {
        // TODO: implement IDisposable
    }
}

Также обратите внимание, что статический класс не может реализовать интерфейс, поэтому Repository<T> не должен быть статическим.

...