【发布时间】:2019-09-10 12:14:08
【问题描述】:
我正在尝试使用通用存储库模式从包含不同表(如 Employee、Project、Skills)的数据库中删除 Employee 实体。
namespace Information.Repository
{
public class IRepositoy<TEntity> : IRepository<TEntity> where TEntity : class
{
private readonly ApplicationDbContext _dbContext;
public IRepositoy(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
public void Remove(int id)
{
TEntity element = _dbContext.Set<TEntity>().Find(id);
_dbContext.Set<TEntity>().Remove(element);
}
}
}
当上述 Remove 方法被调用时,它会进行两次数据库调用
用于获取实体。
秒删。
我找到了类似下面的查询,它使用单个 SQL 查询执行 当实体类型(员工或项目或技能)已知时
public void Remove(int id)
{
Employee employee = new Employee { EmployeeId = id };
_dbContext.Entry(employee).State = EntityState.Deleted;
}
任何人都可以建议我如何使用类似于上述示例的通用存储库模式来删除实体而不获取它。
【问题讨论】:
-
如果您使用.Net Core,Global Query Filters 中解释的软删除将对您有所帮助。
-
看看通用存储库的陷阱解释here。
标签: c# sql entity-framework generics repository-pattern