簡體   English   中英

非泛型類中的泛型方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM