如何确保MVC实体在运行时与数据库同步?

时间:2015-06-01 15:46:35

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 ef-database-first

我有一个使用Entity Framework的简单数据库第一个MVC应用程序。 我在视图中使用ViewData.ModelState.IsValid来捕获Controller中的任何错误。 Controller根据id查询数据库,并根据实体创建一个对象,然后将其返回给View。

最近,应用程序的用户得到了未处理的异常。这被跟踪到从数据库表中删除的字段,并且与实体模型不同步(我知道糟糕的变更管理!)。虽然View认为模型有效,但View在尝试访问已删除的数据字段时会引发错误。

如何在运行时使用控制器确保实体与数据库同步,以便我可以更好地管理错误。 感谢

1 个答案:

答案 0 :(得分:0)

首先,您必须检查您的实体是否仍然存在于您的上下文中:

existingCaseItem = Context.CaseItems.Where(ci => ci.InventoryItem.Id == caseItem.InventoryItem.Id).FirstOrDefault();

如果existingCaseItemnull不同,则它是有效的实体。否则不会。

了解自上次从数据库中获取新参考资料以来与您的资料进行比较后是否有变化。

如果您正在使用WCF,我建议抛出类似自定义异常的内容:

if (existingCaseItem == null)
{
    throw new FaultException<AtcWcfEntryNotFoundException>(
        new AtcWcfEntryNotFoundException(caseItem.InventoryItem.GetType(),
        caseItem.InventoryItem.Id));
}