问题描述
我大约有10个具有完全相同方法的控制器,唯一改变的是表,并且它是从表中更新单个字段(前面有更好的解释)...所以我在考虑创建我的通用存储库界面上的一种方法...
问题是,实现这些方法的类不知道我们在说什么表,所以我无法到达该列,当然,这些列的名称也不同...
更具体地说,我想更新记录的顺序。如果我将记录从1改为3,它将记录的顺序从1更改为3。这完全发生在所有表中,每个表都称为一个字段OrderCompany或OrderCountry等...由于我无法获取该字段,所以我应该如何在存储库中进行更新?
我要更新的代码:
[HttpPost]
public async Task UpdateOrderAsync([FromBody] Ordemmodel ordemObj)
{
using (var db = _context)
{
int ordemFinal = 0;
//guardar item a ser movido
var itemPegado = await _context.RH_Cargos.FindAsync(ordemObj.itemAMover);
if (ordemObj.itemOndeFoi != 0)
{
var itemFinal = await _context.RH_Cargos.FindAsync(ordemObj.itemOndeFoi);
ordemFinal = (int)itemFinal.OrdemCargos;
}
//update a todos os valores intermedios quando é para aumentar a ordem do item
if (itemPegado.OrdemCargos < ordemFinal)
{
var areas = db.RH_Cargos.Where(x => x.OrdemCargos > itemPegado.OrdemCargos & x.OrdemCargos <= ordemFinal).ToList();
areas.ForEach(o => o.OrdemCargos -= 1);
}
//update a todos os valores intermedio quando é para diminuir a ordem do item
if (itemPegado.OrdemCargos > ordemFinal)
{
ordemFinaL++;
var areas = db.RH_Cargos.Where(x => x.OrdemCargos < itemPegado.OrdemCargos & x.OrdemCargos >= ordemFinal).ToList();
areas.ForEach(o => o.OrdemCargos += 1);
}
//guardar o item que se quis mover para o spot certo
itemPegado.OrdemCargos = ordemFinal;
//guardar
db.SaveChanges();
}
感谢您的帮助!谢谢:)
解决方法
您可以使用PocoGenerator(例如https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator)创建存储库类,每个存储库类都可以继承具有通用属性/方法的基类存储库,但这听起来像是您不应该在某个地方使用的好示例过于抽象。如果您有不同的表并且要更新不同的列,那么您将做不同的事情,应该使用清晰的显式代码显示此内容,而不是隐藏在强制抽象的后面。
否则,您可以使用多种模式,例如Command pattern,但是如果问题仅出在您上面的代码上,我将保持原样,这看起来还不错。