[英]generic method in a non-generic class
我正在嘗試創建一個簡單的數據訪問類,該類充當返回各種實體的庫。 我所有的實體類都是通過VS 2013中的Linq-to-SQL映射器生成的,所有這些類都可以通過Find(primary id)從dataContext返回。
我只想定義通用的“查找”,“刪除”,“更新”等,而不必為每個表/對象重復此操作,但是我不想創建存儲庫模式。
如何創建無論如何都能起作用的通用方法? 這就是我所擁有的,當然它表示未定義T,但是我認為我們可以在非泛型類中創建泛型方法,那么我在做什么錯呢?
我想做的是
var c = DAL<Customer>.Find(id)
var e = DAL<Employee>.Find(id)
...等
我嘗試編寫的代碼是
public class DAL
{
private string _key;
private DataContext _context = null;
//private DbSet<T> _table = null;
public DAL(string key)
{
_key = key;
_context = new DataContext();
}
public void Dispose()
{
_context.Dispose();
}
public DbSet<T> Find<T>(int id)
{
var d = _context.Set<T>();
//return d.Find(id);
}
}
我有點迷路...我不想定義
public class DAL<T> where T:class
將每個DAL綁定到一個類型
這是我第一次嘗試使用通用網絡,因此不勝感激
這樣的事情應該起作用:
public T Find<T>(int id) where T : class
{
return context.Set<T>().Find(id);
}
您可以指定類的泛型方法,但需要使用約束:
public class DAL
{
// .... previously written code
public DbSet<T> Find<T>(int id) where T : class
{
return _context.Set<T>();
}
}
您還必須這樣稱呼它:
var dal = new DAL();
var data = dal.Find<Customer>(1);
還要注意,您的代碼有很多問題,您定義了一個dispose方法,但是您沒有實現IDisposable接口,實際上並沒有從該方法返回任何東西,等等。
注意:出於所有目的和目的,這仍然是存儲庫模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.