Для LINQ-to-SQL контекст данных уже делает многое для вас. Таким образом, я думаю, что дженерики могли бы быть лучшим способом достижения сохранения, при этом все еще имея некоторое рассмотрение вашего интерфейса (хотя я не совсем уверен, что интерфейс дает вам в этом сценарии ...).
Вы можете получить доступ к общему аспекту контекста данных через GetTable<T>()
:
static void Save<T>(T item)
where T : class, IPublicObject
{
using (DataContext ctx = GetDataContext())
{
Table<T> table = ctx.GetTable<T>();
// for insert...
table.InsertOnSubmit(item);
// for update...
table.Attach(item, true);
// for delete...
table.DeleteOnSubmit(item);
ctx.SubmitChanges();
}
}
Обратите внимание, что вывод типа должен означать, что вам не нужно указывать T
при сохранении:
Foo foo = new Foo();
Save(foo); // <Foo> is inferred
Это какое-то использование?