У меня есть различные методы, которые должны иметь возможность вызвать общий метод, передающий DbSet в качестве параметра. На данный момент у меня есть этот рабочий код (здесь упрощенно):C# generics для DbSet <something>
public class MyClass
{
private async Task<JsonResult> Delete<T>(int? id, T dbs) where T : DbSet<A>
{
var row = await dbs.SingleOrDefaultAsync(m => m.ID == id);
dbs.Remove(row);
await db.SaveChangesAsync();
return Json(r); // definition od "r" removed from code to simplify it
}
public async Task<JsonResult> A(int? id)
{
return await Delete(id, db.A);
}
public async Task<JsonResult> B(int? id)
{
return await Delete(id, db.B);
}
public async Task<JsonResult> C(int? id)
{
return await Delete(id, db.C);
}
Я не знаю, горячей, чтобы изменить подпись метода «Удалить», так что методы A, B, C ... все это может назвать это ,
Не уверен, что вы хотите передать 'DbSet', может быть, проще вызвать метод' context.Set'? –
DavidG
Не связано с вашим вопросом, но каковы методы 'Delete', которые должны точно выполнять? Кажется, что удаляет элемент из 'DbSet', полученный в качестве аргумента, а затем сохраняет изменения в полностью несвязанный контекст. –
Удаляет элемент из DbSet, соответствующий принятому «id». – Marko