我正在为 Add、Remove 和 Find 实现泛型,因为我正在实现多租户,它允许我从数据库访问 IQueryables,而不是 DbSets。
Add 是如何实现的:
之前的代码:
interest = db.Interests.Add(new Interest()) // Interests is dbSet
之后的代码:
interest = db.Add(new Interest()) // Interests is dbSet
// in db class
public T Add<T>(T item) where T : class, ITenantData
{
var set = _appContext.Set<T>();
return set.Add(item);
}
这行得通。现在我正在尝试为 Find 做同样的事情,但是因为我使用的是 Id 而不是 Typed 参数,所以我有点卡住了。
之前的代码:
var aptitude = db.Aptitudes.Find(interest.AptitudeId); // Aptitudes is a DbSet
之后的代码:
var aptitude = db.Find(interest.AptitudeId); // how to identify type?
我不能这样做:
var aptitude = db.Aptitudes.Find(interest.AptitudeId);
因为 Aptitudes 现在是一个 IQueryable。
所以这目前失败了:
public T Find<T>(T query) where T : class, ITenantData
{
var set = _mentorContext.Set<T>();
return set.Find(query);
}
因为未识别类型 - 我得到:
类型“int”必须是引用类型才能在泛型类型或方法“App.Context.TenantContext.Find(T)”Service.cs 中用作参数“T”
我对泛型有点陌生,这里的任何帮助将不胜感激。