DbSets ではなく、データベースから IQueryables にアクセスできるマルチテナンシーを実装しているため、Add、Remove、Find のジェネリックを実装しています。
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 に対して同じことをしようとしていますが、Typed パラメーターではなく Id を使用しているため、少し行き詰まっています。
前のコード:
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' として使用するために、参照型である必要があります。
私はジェネリックに少し慣れていません。ここで何か助けていただければ幸いです。