Stored procedures 视图和存储过程-用于数据库安全(实体框架4)

Stored procedures 视图和存储过程-用于数据库安全(实体框架4),stored-procedures,views,entity-framework-4,Stored Procedures,Views,Entity Framework 4,一般来说,我对数据库编程有点陌生,对EntityFramework4甚至更新。我正在阅读O'Reilly Press关于这个主题的书,我只是想确保我理解作者所说的关于将视图与存储过程结合使用以增加一层安全性的内容。她说: 如果您不愿意公开数据库表进行查询,那么您不必。。。视图作为实体进入模型,但由于视图是只读的,所以在调用SaveChanges时,Entity Framework无法构造命令将数据保留回数据库。。。然而,这些实体仍然像其他实体一样参与变更跟踪(关于EntityKeys的警告我将马

一般来说,我对数据库编程有点陌生,对EntityFramework4甚至更新。我正在阅读O'Reilly Press关于这个主题的书,我只是想确保我理解作者所说的关于将视图与存储过程结合使用以增加一层安全性的内容。她说:

如果您不愿意公开数据库表进行查询,那么您不必。。。视图作为实体进入模型,但由于视图是只读的,所以在调用SaveChanges时,Entity Framework无法构造命令将数据保留回数据库。。。然而,这些实体仍然像其他实体一样参与变更跟踪(关于EntityKeys的警告我将马上讨论)。然后,您可以将存储过程映射到这些基于视图的实体,以便在调用SaveChanges时保持数据。这为您提供了查询和更新数据的完整往返过程,而无需公开数据库表


我在理解这个存储过程映射如何工作时遇到了一些困难,因为视图是只读的。她是说存储过程将映射到视图表示的实体,插入、更新和删除过程映射到数据库,选择过程映射到视图吗?

这是托管数据库环境中的常见要求。基本上,它是这样工作的:

  • 您可以从视图中选择数据
  • 您可以使用存储过程来插入、更新和删除语句
EntityFramework4很好地支持这些需求,并且可以创建不需要应用程序(及其用户)直接访问表的解决方案。这对于敏感环境和行业来说是一个巨大的优势

您基本上将视图“导入”到EF模型中。然后,每个视图将在模型中创建一个实体(一个类)。对于这些实体中的每一个,您都可以将插入、更新、删除操作映射到数据库中现有的存储过程中


请参阅《MSDN杂志》上的文章,以了解更多关于这方面的详细说明。它非常详细地解释了所有的步骤。

那么,插入、更新和删除视图或数据库本身的实际工作是什么呢?我的直觉是数据库,因为视图是只读的。或者,视图是否通过其实体进行了某种更改,然后这些更改以静默方式传递给数据库本身?编辑:我认为我的部分问题是不理解视图是什么。我以为它们只是数据库结构和当前数据的只读快照。看起来它们比这更复杂。@kevinmajor1:存储的进程通常会对数据库表本身进行操作。但是:视图不必是只读的——您完全可以拥有可更新的视图。视图只是一个“预先制作”的SELECT语句,它将返回一组特定的数据——通常情况下,视图不仅仅是一个语句,它将与其他WHERE子句等合并,最终形成一个SQL语句。@kevinmajor1:查看这篇解释视图是什么的博文:啊,现在更有意义了。谢谢