2012-05-26 5 views
1

J'ai une vue SQL à intégrer à mon application. J'ai utilisé Entity Framework jusqu'à maintenant. Mais le problème est que lorsque j'ajoute une vue à Entity Framework, il commence à traiter ma vue comme une table.Vues SQL avec Entity Framework

Ce que je veux vraiment savoir, c'est s'il me manque quelque chose? Aussi, si j'utilise Nhibernate ce problème sera-t-il résolu? Traitera-t-il la vue comme une vue seulement?

Cette vue est une requête très complexe qui comporte plusieurs jointures et agrégation. C'est pourquoi j'utilise une vue.

+0

Et quel est le problème avec ce genre de traitement «comme une table»? – MarcinJuraszek

+0

Mieux vous postez le code pour nous aider à vous aider –

+1

Voir: [Entity Framework: Création d'un modèle en utilisant des vues au lieu de tables] (http://smehrozalam.wordpress.com/2009/08/12/entity-framework-creating -a-model-using-views-au lieu-de-tables /) ou [Comment utiliser les vues SQL Server avec Entity Framework] (http://www.mssqltips.com/sqlservertip/1990/how-to-use- sql-server-views-avec-the-entity-framework /) - l'utilisation de la vue avec EF ne devrait pas être un vrai problème ... –

Répondre

1

Mais le problème est que lorsque j'ajoute une vue à Entity Framework, commence à traiter ma vue comme une table.

Non, ce n'est pas le cas. Si vous ajoutez l'affichage à votre modèle via l'assistant (concepteur EDMX), il gérera en interne la vue en tant que requête de définition qui rend l'entité readonly. Au niveau de l'entité (le modèle conceptuel), vous ne voyez pas de différence car il s'agit juste d'une autre entité/classe mais si vous essayez d'apporter des modifications à l'instance de cette classe, vous obtiendrez une exception (sauf si vous mappez des procédures stockées ou commandes SQL personnalisées pour insérer, mettre à jour et supprimer des opérations pour cette entité).

Edit:

vues de base de données ainsi que d'autres caractéristiques spécifiques de bases de données telles que des procédures ou des fonctions SQL stockées ne sont que pour la base de données premier scénario (lorsque vous utilisez modèle de mise à jour de la base de données dans le concepteur).

L'utilisation de Générer la base de données à partir du modèle est pour le premier scénario du Modèle où vous dites à VS: "Voici mon modèle et je veux une base de données pour le stocker." Tout d'abord, seules les informations issues du modèle conceptuel sont utilisées (le mappage original et la description de la base de données sont remplacés par un nouveau chaque fois que vous exécutez cette commande afin que même le mappage vers la base de données originale puisse être interrompu). Il ne peut pas créer de fonctionnalités spécifiques à la base de données car il ne sait pas que la classe doit être mappée et ne sait pas comment la vue doit être créée (la requête de la vue d'origine est inconnue).

Vous pouvez forcer VS à créer la vue pour vous, mais cela représente beaucoup de travail dans les modèles T4 où vous devrez fournir un script de création SQL pour la vue.

+0

Ok, je vois ce que vous voulez dire. Mais quand je sélectionne "Générer la base de données à partir du modèle", il crée une table à la place des vues. Y a-t-il un autre moyen de créer la base de données? – Tushar

+0

J'ai mis à jour ma réponse. –

+0

Merci Ladislav, c'était vraiment utile. Ce que je pense à faire, c'est combiner un cadre d'entité et un outil de migration db comme une migration fluide.Alors que je peux gérer les vues sql et d'autres éléments spécifiques à la base de données et avoir les avantages du framework d'entité qui créerait des entités à partir de la base de données. – Tushar