我应该使用存储库模式来更新单个字段吗?如果是这样,怎么办?

问题描述

我大约有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,但是如果问题仅出在您上面的代码上,我将保持原样,这看起来还不错。