我有一个MVC应用程序,有多个控制器读/写MS SQL数据库,我想将所有数据库调用合并到一个控制器(称为XYZdataset.cs),而不是从每个控制器中的单个方法调用数据库控制器。
情况是:当我编辑单个记录时,在成功更新数据库后,我将被重定向到Index()方法,其中显示所有记录的列表。
使用场景1(下面),索引()视图显示更新的列表,其中包含所有新更新的值。
对于场景2,Index()视图不显示新近更新的值;但是,当我转到刚编辑的记录时,我会看到最新的值 - 因此,数据库会更新。
可能是罪魁祸首?我尝试过使用[OutputCache(Duration = 0)] 和[OutputCacheAttribute(VaryByParam =“*”,Duration = 0,NoStore = true)]在控制器和方法级别上,但它不会改变结果。
感谢您提供有关寻找解决方案的任何提示!
/*** Items CONTROLLER ***/
// SCENARIO 1 - works like a charm, displays updated list in the view after a record has been updated:
public ActionResult Index()
{
var itemList = db.EntityObj.Include(i => i.Status).OrderByDescending(i => i.itemId);
return View(itemList.ToList());
}
// Scenario 2 - does not display the freshly made record edits, even though the changes are recorded in the DB:
public ActionResult Index()
{
var itemList = XYZdataset.GetList("a");
return View(itemList.ToList());
}
namespace APPspace.DAL
{
public class XYZdataset
{
private static MVCTestsDBEntities db = new MVCTestsDBEntities();
public static List<ItemXYZ> GetList(string viewType)
{
List<ItemXYZ> itemList = new List<ItemXYZ>();
switch (viewType.ToLower())
{
case "p":
itemList = db.EntityObj.Include(i => i.Status).Where(i=>i.statusId == 999).OrderByDescending(i => i.itemId);
break;
case "a":
itemList = db.EntityObj.Include(i => i.Status).OrderByDescending(i => i.itemId);
break;
default:
itemList = db.EntityObj.Include(i => i.Status).Where(i=>i.statusId == 999).OrderByDescending(i => i.itemId);
break;
}
return itemList;
}
}
}