2011-09-22 1 views
0

J'essaye de construire une nouvelle application au-dessus d'une DB existante.
Les informations d'identification utilisateur sont récupérées via un système distinct et renvoient un GUID à l'application cliente identifiant l'utilisateur. Toutefois, cette base de données utilise un bigInt pour identifier les utilisateurs afin de contourner le problème que chaque SP de la BD utilise local UserIdentity basé sur un GUID (userID) transmis au SP.
Je voudrais utiliser EF (.Net4.0) mais je ne vois pas de moyen de faire passer le GUID dans un SP pour permettre à la fonction de mappage de DB de déterminer l'UserIdentity locale.
Le mappage du SP pour renvoyer des ensembles fonctionne correctement, en prenant un GUID, en dérivant l'UserIdentity local et en retournant un jeu d'enregistrements de 'pulse'. Les mises à jour et les suppressions sont correctes car elles peuvent utiliser la valeur Id de l'entité.Complex Inséré Processus stocké inadapté à EF?

Je suppose que ma vraie question est "Y at-il un moyen d'envoyer une valeur à une procédure stockée si l'entité à laquelle le SP est mappé ne contient pas une propriété avec cette valeur?"

Voici une table typique (l'entité EF a les mêmes propriétés) et son insert SP correspondant.

CREATE TABLE [dbo].[Pulse](
    [Id] [bigint] IDENTITY(1,1) NOT NULL, 
    [UserIdentity] [bigint] NOT NULL, 
    [Recorded] [datetime] NOT NULL, 
    [Value] [int] NOT NULL, 

L'insert SP ressemble à ce

ALTER PROCEDURE [dbo].[Pulse_Insert] @userId uniqueIdentifier, @recorded datetime, @pulse int AS 
BEGIN 
SET NOCOUNT ON; 
     declare @userIdentity bigint 
     select @userIdentity = dbo.GUIDUserMapping(@userId) 
     insert into dbo.Pulse (UserIdentity, recorded, value) 
     values(@userIdentity,@recorded,@pulse) 
     END 

Répondre

0

Ce n'est pas "impropre à EF," mais si vous utilisez un proc pour une seule opération (INSERT/UPDATE/DELETE/SELECT, » l'EF attend vous d'utiliser procs pour l'autre.

ne serait-il plus facile d'utiliser un déclencheur INSTEAD OF, ici? Alors l'EF aura pas besoin de connaître du tout.

+0

Ma question est plus à faire avec l'Entité n'ayant pas de propriété (en ce cas UserID) à mapper dans les appels de procédure stockée. Je pensais pouvoir tromper EF en ajoutant une classe partielle (Pulse) avec la propriété UserID supplémentaire, mais le concepteur EDM et le navigateur de modèle n'affichent pas les propriétés de l'autre partie de la classe partielle. –

+0

Ah. Ce n'était pas du tout clair d'après votre question. Non, je ne pense pas que le design fonctionnerait bien avec le FE. Vous pouvez le faire fonctionner avec 'ObjectContext.ExecuteStoreCommand', mais cela me semble évident. –

+0

J'ai changé la question pour clarifier un peu ce que je demande. J'espérais éviter trop de 'kludge' mais peut-être que ce n'est pas possible. –