Obtenir l'ID user de l'user actuellement connecté dans le fournisseur d'appartenances par défaut asp.net

j'ai deux tables

Employee (EmpID, Name, UpdatedBy, UpdateDate) EmpContact (ContactID, Contact,EmpID) 

UpdatedBy,UpdateDate de créer un triggersur qui met à jour un champs de table employé par UpdatedBy,UpdateDate . Lorsque le contact est ajouté ou modifié, je veux mettre à jour les champs UpdatedBy and UpdateDate (Ces deux tables ont des vues asp.net-mvc différentes). J'utilise le fournisseur d'appartenance par défaut pour authentifier l'user.
Donc, ma question est de savoir comment puis-je get l'user actuellement connecté dans le triggersur qui a initié l'insertion, la mise à jour ou la suppression. Est-il possible que je sache quel identifiant d'user asp.net a initié la transaction dans le TRIGGER

Créer un triggersur d'insertion / mise à jour / suppression qui met à jour la table Emplyoee lorsque des loggings dans EmpContact sont créés / mis à jour / supprimés, par exemple (insert):

 CREATE TRIGGER [dbo].[trgCreateEmpContact] ON [dbo].[EmpContact] FOR INSERT AS UPDATE dbo.Employee SET UpdateDate=GetDate(), UpdatedBy = I.UpdatedBy FROM Employee E INNER JOIN Inserted I ON E.EmpID = I.EmpID 

Vous devez donc également append la colonne UpdatedBy à votre table EmpContact.

Vous obtenez l'user actuellement connecté de la manière suivante:

 MembershipUser currentUser = Membership.GetUser(); GUID currentUserID = (GUID)currentUser.ProviderUserKey; 

Une autre (meilleure) approche serait de créer une procédure stockée qui crée en interne l'logging EmpContact et met à jour la table Employé dans une transaction, par exemple (non testé):

 CREATE PROCEDURE [dbo].[InsertEmpContact] @ContactID int OUTPUT, @Contact varchar(50) OUTPUT, @EmpID int OUTPUT, @UpdateDate datetime OUTPUT, @UpdatedBy int OUTPUT, with execute as Owner AS BEGIN TRANSACTION INSERT INTO EmpContact(Contact, EmpID) VALUES (@Contact,@EmpID) ;SELECT @ContactID=ContactID,@Contact=Contact,@EmpID=EmpID,@UpdateDate=GetDate() FROM EmpContact WHERE (ContactID = SCOPE_IDENTITY()) ;UPDATE dbo.Employee SET UpdateDate=@UpdateDate, UpdatedBy = @UpdatedBy WHERE EmpID = @EmpID IF @@ERROR <> 0 BEGIN -- Rollback the transaction ROLLBACK RETURN END COMMIT 

Cela dépend de la façon dont votre application se connecte à votre database. Si vous le faites, comme la quasi-totalité d'entre nous, avec la mise en commun des connections et un seul user se connectant à la database, la réponse est non, vous ne pouvez pas le savoir dans le triggersur.

Par exemple, l'application se connecte à la database en tant que sa / pwd (ce qui n'est pas conseillé, mais uniquement pour les arguments).

Si l'user un (Paul) se connecte à la database et effectue une mise à jour, votre triggersur obtiendra sa comme user. Si l'user deux (Anne) se connecte à la database, le triggersur obtiendra également sa comme user.

Vous devez donc inclure la mise à jour de l'user dans la mise à jour stat (ou en tant qu'argument de votre procédure stockée)