Как бы я написать метод расширения для System.Data.Linq.Table <T>? - PullRequest
4 голосов
/ 28 октября 2011

Я хотел написать этот небольшой, тривиальный метод расширения для некоторых одноразовых тестовых / консольных приложений, и я не смог выяснить, как получить правильную сигнатуру метода.Я хочу добавить это к каждой имеющейся у меня System.Data.Linq.Table, и я хочу, чтобы он принял экземпляр типа T в качестве параметра.

Вот то, что у меня пока не получаетсяcompile

public static void InsertAndSubmit<T>(this System.Data.Linq.Table<T> tbl, T element)
{
    tbl.InsertOnSubmit(element);
    tbl.Context.SubmitChanges();
}

Тип 'T' должен быть ссылочным типом, чтобы использовать его как параметр 'TEntity' в универсальном типе или методе 'System.Data.Linq.Table'

Ответы [ 2 ]

6 голосов
/ 28 октября 2011

Попробуйте это:

public static void InsertAndSubmit<T>(this System.Data.Linq.Table<T> tbl, T element)
    where T : class
{
    tbl.InsertOnSubmit(element);
    tbl.Context.SubmitChanges();
}

Вам нужно ограничить тип T ссылочным типом (class), чтобы это работало.

Если выпосмотрите Table<TEntity> документацию , вы заметите это же ограничение типа для TEntity из class.Поэтому, чтобы ваш T был совместим с TEntity, он должен соответствовать тем же ограничениям.

3 голосов
/ 28 октября 2011

Вам необходимо указать, что вы будете использовать только типы ссылок в вашем T. Попробуйте:

public static void InsertAndSubmit<T>(this System.Data.Linq.Table<T> tbl, T element) 
    where T : class
{
    tbl.InsertOnSubmit(element);
    tbl.Context.SubmitChanges();
}
...