c#型推理

c#型推理,c#,type-inference,C#,Type Inference,我有一个从DbContext继承的ECMContext类。在ECMContext中有一个属性MlaArticles,它是DbSet,其中MlaArticle继承自WebObject。我创建了一个接受WebObject类型参数的泛型方法。该方法尝试保存对数据库的更改,如果不保存,则会撤消更改 我的问题-既然我已经有了db(已经实例化),并且我知道正在传递的WebObject的类型(MlaArticle,在本例中),有没有一种方法可以引用DbSet集合db.MlaArticles,而不传递额外的参数

我有一个从DbContext继承的ECMContext类。在ECMContext中有一个属性
MlaArticles
,它是
DbSet
,其中
MlaArticle
继承自
WebObject
。我创建了一个接受WebObject类型参数的泛型方法。该方法尝试保存对数据库的更改,如果不保存,则会撤消更改

我的问题-既然我已经有了db(已经实例化),并且我知道正在传递的
WebObject
的类型(
MlaArticle
,在本例中),有没有一种方法可以引用DbSet集合
db.MlaArticles
,而不传递额外的参数?我知道这是错误的,但这说明了我的问题

protected ECMContext db;

void SaveChanges<T>(T obj) where T : WebObject 
{
    try { db.SaveChanges(); }
    catch
    {
        db.MlaArticles.Remove(obj); //this is the original code
        db.DbSet<T>.Remove(obj); //something like this is what I'd like to do
    }
}
受保护的ECMContext数据库;
void SaveChanges(T obj),其中T:WebObject
{
请尝试{db.SaveChanges();}
抓住
{
db.MlaArticles.Remove(obj);//这是原始代码
db.DbSet.Remove(obj);//像这样的事情是我想做的
}
}
您可以使用
Set()
操作:

try { db.SaveChanges(); }
catch
{
    db.Set<T>().Remove(obj);
}
试试{db.SaveChanges();}
抓住
{
db.Set().Remove(obj);
}

是的,就是这样。谢谢你,马修