Déplacement du modèle d’identité ASP.NET vers la bibliothèque de classes

J’essaie de déplacer le modèle d’identité vers une bibliothèque de classes en utilisant les méthodes de ce lien:

Bibliothèque ASP.NET Identity in Services

Problème 1: Il semble continuer à utiliser la chaîne de connexion du projet de site Web. Je l’ai surmonté en spécifiant la chaîne de connexion complète dans la bibliothèque de classes. Puis-je utiliser IdentityDbContext pour utiliser la chaîne de connexion de la bibliothèque de classes?

Problème 2: En raison du problème 1, si je supprime Entity Framework du projet de site Web. Le message d’erreur suivant s’affiche: il recherche le fichier SqlClient d’EF dans le projet de site Web.

Une exception de type ‘System.InvalidOperationException’ s’est produite dans EntityFramework.dll mais n’a pas été traitée dans le code utilisateur

Informations supplémentaires: Aucun fournisseur Entity Framework trouvé pour le fournisseur ADO.NET avec le nom invariant ‘System.Data.SqlClient’. Assurez-vous que le fournisseur est enregistré dans la section ‘entityFramework’ du fichier de configuration de l’application. Voir http://go.microsoft.com/fwlink/?LinkId=260882 pour plus d’informations.

D’autres solutions sont les bienvenues, à condition qu’elles omettent toutes les références à la couche d’access aux données telles que EF dans le projet de site Web.

Pour déplacer le IdentityModel dans une bibliothèque de classes (ce qui est la bonne chose à faire selon le SRP ), procédez comme suit:

  1. Créez une bibliothèque de classes. (ClassLibrary1)
  2. À l’aide de NuGet, ajoutez une référence à Microsoft.AspNet.Identity.EntityFramework. Cela appenda également automatiquement d’autres références.
  3. Ajouter une référence dans votre site Web à ClassLibrary1
  4. Recherchez WebSite / Models / IdentityModel.cs et déplacez-le vers ClassLibrary1.
  5. Faites en sorte que IdentityModel.cs ressemble à ceci:

    public class ApplicationUser : IdentityUser { } public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() : base("YourContextName") { } } 
  6. Assurez-vous que WebConfig de votre site Web contient YourContextName pointant vers la firebase database appropriée dans la section. (Remarque: cette firebase database peut et doit contenir les données de votre application).

      
  7. Faites en sorte que votre classe Contexte EF hérite de votre ApplicationDbContext:

     public class YourContextName : ApplicationDbContext { public DbSet BizClass1 { get; set; } public DbSet BizClass2 { get; set; } // And so forth ... } 

Lorsque quelqu’un de votre site tente de se connecter ou de s’inscrire, le système Identity les achemine vers votre firebase database avec toutes vos données, y compris les tables d’identité.

Bon à faire!

Une mise à jour de la réponse de @ Rap pour EF6 et Identity 2.0:

  1. Créez une bibliothèque de classes. (ClassLibrary1)
  2. À l’aide de NuGet, ajoutez une référence à Microsoft.AspNet.Identity.EntityFramework et Microsoft.AspNet.Identity.Owin.
  3. Ajouter une référence dans votre site Web à ClassLibrary1
  4. Recherchez WebSite / Models / IdentityModel.cs et déplacez-le vers ClassLibrary1.
  5. IdentityModel.cs devrait ressembler à ceci, pas besoin de changer quoi que ce soit:

     public class ApplicationUser : IdentityUser { public async Task GenerateUserIdentityAsync(UserManager manager, ssortingng authenticationType) { // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType var userIdentity = await manager.CreateIdentityAsync(this, authenticationType); // Add custom user claims here return userIdentity; } } public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } } 
  6. Assurez-vous que le site Web.config de votre site Web présente un contexte pointant vers la firebase database appropriée dans la section. (Remarque: cette firebase database peut et doit contenir les données de votre application).

        
  7. Faites en sorte que votre classe Contexte EF hérite de votre ApplicationDbContext:

     public class YourContextName : ApplicationDbContext { public DbSet BizClass1 { get; set; } public DbSet BizClass2 { get; set; } // And so forth ... } 

Que voulez-vous dire en déplaçant Identity dans une bibliothèque de classes? être utilisé comme référence? J’ai mon gestionnaire d’utilisateurs et utilisateur personnalisé dans une bibliothèque séparée, mais c’est tout.

Les éléments d’identité nécessitent un magasin de données quelconque. Si vous configurez Identity pour utiliser EF, veillez à obtenir le package nuget supplémentaire, et vous devriez pouvoir transmettre la chaîne de connexion lorsque vous créez le contexte.

Du haut de ma tête…

 var mgr = new UserManager( new IUserStore_ofYourChoice( new DbContextName("ConnectionSsortingngOverload")); 

Je pense que le magasin EF est “UserStore”, faut vérifier.

Il existe maintenant une douzaine de paquets de nugets différents pour les banques de données pour Identity. Vous n’avez pas besoin d’utiliser EF, mais cela nécessite un magasin quelconque.

** MODIFIER **

En outre, comme référence, il utilisera toujours la configuration, et donc ses chaînes de connexion définies, du projet principal par défaut, c’est ainsi que cela fonctionne, donc ça va.

Il y a quelques règles dont vous devez tenir compte et dont vous devez vous souvenir.

Tout d’abord, le projet Web utilisera TOUJOURS et UNIQUEMENT le ou les fichiers web.config qu’il trouve dans sa propre période de projet. Peu importe ce que vous mettez dans un autre fichier de configuration ailleurs dans votre solution. Le projet Web peut UNIQUEMENT utiliser ce qu’il trouve dans son propre projet. Si vous avez une chaîne de connexion dans un autre projet, vous devez la répliquer sur le projet Web, sinon elle ne sera jamais trouvée.

Deuxièmement, en supposant que le projet Web est votre projet de démarrage et que vous utilisez des migrations de données (puisque Identity l’utilise), notez que le gestionnaire de packages utilisera TOUJOURS la chaîne de connexion trouvée dans le projet de démarrage. Par conséquent, le gestionnaire de packages, pour update-database, n’utilisera pas la chaîne de connexion dans votre projet de modèle.

La solution simple est la suivante: 1. Copiez votre chaîne de connexion depuis votre projet de modèle vers votre projet Web. 2. Dans la console du gestionnaire de packages, assurez-vous que la liste déroulante permettant de sélectionner le contexte pointe vers votre projet de modèle.

Question 1:-

Je suppose que peut utiliser la solution trouvée sur le lien ci-dessous: –

Cadre d’entité d’installation pour la chaîne de connexion dynamic

Question 2:-

Je pense que le framework d’entités construit la façon dont le temps d’exécution utilisera le fichier web.config de ce projet. Les instructions de Microsoft suggèrent également que

http://msdn.microsoft.com/en-us/library/vstudio/cc716677(v=vs.100).aspx