В случае генериков вы, вероятно, будете ограничены базовыми операциями CRUD. В этом случае вы сможете использовать таблицу :
DataContext ctx;
var table = ctx.GetTable<Foo>();
table.InsertOnSubmit(newObject);
table.DeleteOnSubmit(oldObject);
(и обновление должно работать для объектов, которые были изменены, используя SPROC, который вы указали для обновлений).
SubmitChanges
будет затем использовать правильные sprocs автоматически (вы можете указать SPROC для вставки, обновления и удаления в конструкторе или DBML. Хитрый бит - это get . Это не раскрывается непосредственно на ctx ... Единственное предложение, которое у меня есть, это шаблон на основе имени для контекста данных и отражения? Так, может быть, GetFoo
метод для получения Foo
.
Другой подход, конечно, заключается в реализации нескольких универсальных интерфейсов, т.е.
partial class MyDataContext : IFetch<Foo>, IFetch<Bar>
{
Foo IFetch<Foo> Get(int key) { .. call get method on ctx ..}
Bar IFetch<Bar> Get(int key) { .. call get method on ctx ..}
}
interface IFetch<T>
{
T Get(int key);
}
(который расширяет контекст данных)
Тогда вы можете привести контекст данных:
var fetch = ctx as IFetch<T>();
return fetch.Get(key);