我希望能够使用类型为T的通用服务类,它允许我动态查询数据库。例如。通常我会做这样的事情来删除记录
public void Delete(Post post)
{
this._context.Posts.Remove(post);
}
我希望能够做到这一点
public void Delete(T post)
{
this._context<T>.Remove(post);
}
我在这里发现了一篇文章,它上面有一些画笔,但是如果看起来不像是一种干净的方式来实现它。 https://blog.magnusmontin.net/2013/05/30/generic-dal-using-entity-framework/
答案 0 :(得分:4)
您需要DbContext.Set
https://msdn.microsoft.com/en-us/library/gg679544(v=vs.113).aspx
返回一个非泛型DbSet实例,用于访问上下文和底层存储中给定类型的实体
public void Delete<T>(T post)
where T : class
{
this._context.Set<T>.Remove(post);
}
稍后,您还可以根据以下内容进行查询:
this._context.Set<T>.AsQueryable().Where(predicate);
在这种情况下,predicate
将是Expression<Func<T, bool>>
所以你可以有一个通用的查询方法:
public IEnumerable<T> Query<T>(Expression<Func<T, bool>> predicate)
where T : class
{
return this._context.Set<T>().AsQueryable().Where(predicate).ToList();
}
...但我现在稍微偏离了这个问题!
答案 1 :(得分:0)
您可以使用Generic存储库模式
public class Sample
{
public void AddNewPerson(Person newPerson)
{
var personRepo = new Repository<Person>();
personRepo.Insert(newPerson);
personRepo.SaveChanges();
}
public void DeletePerson(int personId)
{
var personRepo = new Repository<Person>();
Person person= personRepo.Find(p => p.Id == personId).SingleOrDefault();
personRepo.Delete(person);
}
}
用法:
XML