我试图创建一个简单的数据访问类,它充当一个库来返回各种实体。我的所有实体类都是通过VS 2013中的Linq-to-SQL映射器生成的,所有这些实体类都可以通过Find(主要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绑定到类型
这是我第一次冒险进入通用方法,所以任何帮助都会受到赞赏
答案 0 :(得分:2)
这样的事情应该有效:
public T Find<T>(int id) where T : class
{
return context.Set<T>().Find(id);
}
答案 1 :(得分:2)
您可以指定类的泛型方法,但是您需要使用约束:
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接口,您实际上并没有从方法中返回任何内容等。
注意:出于所有意图和目的,这仍然是一个存储库模式。