2009-11-30 12 views
10

J'ajoute une vue très simple (ou j'essaie de) à mon modèle d'objet entités. La base de données est dans SQL Server 2008. Je suis sur .Net 3.5 (SP1) en utilisant C#.Comment ajouter une clé primaire à une vue sql? - Ou une autre manière de lier les vues à des entités LINQ-2

La vue a deux champs: couleur et colorcount, un Varchar (50) et un nombre (*) respectivement. Lorsque je fais Mettre à jour le modèle à partir de la base de données et que je sélectionne la vue à ajouter, il s'exécute (il met à jour les tables, ajoute des champs sans problème) mais n'ajoute pas la vue. Aucune erreur, aucun avertissement ou message n'est affiché.

Quand j'ouvre le fichier .edmx je vois qu'il montre Warning 6013: No primary key defined.

La vue est complexe et je préfère ne pas le traduire à une requête LINQ. Comment puis-je ajouter une clé primaire afin que les entités prennent en charge la vue?

Existe-t-il une façon non bidouille d'ajouter une vue comme celle-ci à un EDMX?

+0

Faire la couleur dans la table source non nul ne pas résoudre le problème. –

+0

Faire en sorte que count (*) ne puisse pas être nul ne résout pas non plus le problème –

+0

L'ajout d'un Row_Number en tant que colonne ne fonctionnait pas non plus, donc il est clair que Entity ne peut pas trouver une colonne c'est unique avec lequel construire une clé composite. –

Répondre

23

Après avoir créé la vue à l'aide schemabinding vous pouvez ajouter une clé primaire à elle:

CREATE VIEW Colors WITH SCHEMABINDING 
AS SELECT Color='yellow', ColorCount=100 
GO 
CREATE UNIQUE CLUSTERED INDEX PK_Colors ON Colors (Color) 
1

Je ne sais pas si cela va vous aider, mais vous pouvez créer une clé primaire à l'aide d'une fonction d'une valeur de table multi-instruction .

Je ne trouve pas de référence à une clé primaire pour une vue, mais je sais que cela peut être fait avec une fonction de table.

CREATE FUNCTION (Transact-SQL)

Questions connexes