我对数据库编程有一点新意,甚至比实体框架4更新。我正在阅读关于这个主题的O'Reilly Press书,只是想确定我理解作者在说什么关于将视图与存储过程结合使用以获得额外的安全层。她说:
如果您不愿意公开数据库表以进行查询,则不必这样做。 ...视图作为实体进入模型,但由于视图是只读的,因此当您调用SaveChanges时,实体框架无法构造命令以将数据持久保存回数据库。 ......然而,这些实体仍然像任何其他实体一样参与变更跟踪(关于EntityKeys的警告,我将暂时讨论)。然后,您可以将存储过程映射到这些基于视图的实体,以便在调用SaveChanges时保留数据。这为您提供了完整的往返查询和更新数据,而不会暴露您的数据库表。
由于视图是只读的,因此我无法理解此存储过程映射的工作原理。她是说存储过程将映射到视图表示的实体,插入,更新和删除过程映射到db并且select过程映射到视图?
答案 0 :(得分:3)
这是托管数据库环境中的常见要求。基本上,它以这种方式工作:
实体框架4很好地支持这些要求,并且可以创建不需要对应用程序(及其用户)进行任何直接表访问的解决方案。在敏感的环境和行业中,这可能是一个很大的优势。
您基本上会将视图“导入”到您的EF模型中。然后,每个视图将在模型中创建一个实体(一个类)。对于每个实体,您可以将INSERT,UPDATE,DELETE操作映射到数据库中的现有存储过程。
有关此内容的详细说明,请参阅MSDN杂志中的Deny Table Access to the Entity Framework Without Causing a Mutiny文章。它详细解释了所有步骤。