我问过上一个问题,我提供了这段代码:
public void AddRecord<T>(params T[] items) where T : class
{
var set = Set<T>();
foreach (var item in items)
set.Add(item);
}
现在,这很好,但我想从另一个方法中调用此方法。我可以在哪里确定是否需要添加或更新记录。
我试过这个:public void AddNewRec(Object entity, bool add)
然而抛出异常:entity type Object is not part of the model for the current context
。到底是怎么回事?那么实体然后在包装器方法中应该具有什么参数类型?很困惑。
答案 0 :(得分:2)
正在发生的事情是entity
参数属于Object
类型,因此当您将其传递给通用AddRecord<T>
方法时,T
会变为Object
。然后,在该方法中,Set<T>()
变为Set<Object>()
,并且由于Object
不是您的实体类型之一,因此您的上下文无法为其找到DbSet
,并且它barfs。
您应该能够通过将AddNewRec
方法更改为通用方法而不是将其传递给Object
来尝试使用它:try AddNewRec<T>(T entity, bool add) where T : class
。这应该允许您的实体类型过滤到您的AddRecord<T>
方法。