2010-09-19 8 views
2

Je suis un peu nouveau pour la programmation de base de données en général, et même plus récent pour Entity Framework 4. Je lis le livre d'O'Reilly Press sur le sujet, et je veux juste être sûr que je comprends ce que l'auteur dit à propos de l'utilisation des vues en conjonction avec les procédures stockées pour une couche de sécurité supplémentaire. Elle dit:Vues et procédures stockées - utilisation des deux pour la sécurité DB (Entity Framework 4)

Si vous êtes réticent à exposer vos tables de base de données pour l'interrogation, vous n'avez pas à le faire. ... Les vues viennent dans le modèle en tant qu'entités, mais parce que les vues sont en lecture seule, Entity Framework n'est pas capable de construire des commandes pour conserver les données dans la base de données lorsque vous appelez SaveChanges. ... Cependant, ces entités participent toujours au suivi des changements, comme toutes les autres entités (avec une mise en garde sur EntityKeys dont je parlerai dans un instant). Vous pouvez ensuite mapper des procédures stockées sur ces entités basées sur une vue afin de conserver les données lorsque vous appelez SaveChanges. Cela vous donne un aller-retour complet pour interroger et mettre à jour les données sans exposer vos tables de base de données.

J'ai quelques difficultés à comprendre comment ce mappage de procédure stockée fonctionnerait puisque les vues sont en lecture seule. Est-elle en train de dire que les procédures stockées seraient mappées aux entités représentées par la vue, avec les procédures d'insertion, de mise à jour et de suppression mappées à la base de données et la procédure de sélection mappée à la vue?

Répondre

3

Ceci est une exigence courante dans les environnements de base de données hébergés. En gros, cela fonctionne de cette façon:

  • vous sélectionnez vos données de vues
  • vous utilisez des procédures stockées pour INSERT, UPDATE, DELETE

Entity Framework 4 prend en charge bien ces exigences et permet pour créer des solutions qui ne nécessitent aucun accès direct à la table pour votre application (et ses utilisateurs). Cela peut être un gros plus dans les environnements et les industries sensibles.

Vous importeriez essentiellement les vues dans votre modèle EF. Chaque vue crée alors une entité (une classe) dans votre modèle. Pour chacune de ces entités, vous pouvez ensuite mapper les opérations INSERT, UPDATE, DELETE sur des procédures stockées existantes dans la base de données.

Voir l'article Deny Table Access to the Entity Framework Without Causing a Mutiny dans le magazine MSDN pour une explication plus détaillée des tenants et aboutissants de ce document. Il explique toutes les étapes dans les moindres détails.

+0

Alors, qu'allons-nous réellement faire fonctionner avec INSERT, UPDATE et DELETE, la vue ou la base de données elle-même? Mon instinct dit base de données, puisque la vue est en lecture seule. Ou, est-ce que la vue est modifiée d'une manière ou d'une autre à travers ses entités, et ces changements sont ensuite transmis silencieusement à la base de données elle-même? EDIT: Je pense qu'une partie de mon problème ne comprend pas ce que sont les vues. Je pensais qu'ils étaient juste un instantané en lecture seule de la structure d'une base de données et des données actuelles. Il semble qu'ils sont plus impliqués que ça. –

+0

@ kevinmajor1: les processus stockés fonctionneraient généralement sur les tables de la base de données elles-mêmes. Mais: la vue ne doit pas être en lecture seule - vous pouvez très bien avoir des vues pouvant être mises à jour. Une vue est juste une instruction SELECT "pré-faite" qui renverra un ensemble spécifique de données - et normalement, la vue n'est pas plus qu'une simple instruction qui sera fusionnée avec vos clauses WHERE supplémentaires etc. pour former une instruction SQL à la fin. –

+0

@ kevinmajor1: consultez cet article de blog expliquant ce qu'est une vue: http://odetocode.com/code/299.aspx –

Questions connexes