c# - wingtip - Establezca la propiedad ASP.NET Identity ConnectionString en.NET 4.5.1
getting started with asp net 4.5 web forms and visual studio 2013 wingtip toys (2)
Release Candidate
Funciona con Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1
En el constructor sin parámetros para AccountController, cambie la línea
IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
a
IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new DefaultIdentityDbContext("YourNameOrConnectionString")));
y estás listo para irte
Lanzamiento
Funciona con Microsoft.AspNet.Identity.EntityFramework 1.0.0
Similar a lo que hicimos para la versión candidata, pero hacemos esto en un lugar diferente. Abra IdentityModels.cs
que se creó como parte de la plantilla VS y agregue el siguiente constructor a la clase ApplicationDbContext
:
public ApplicationDbContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
}
y ahora puede cambiar el constructor sin parámetros en AccountController
desde
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}
a
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext("YourNameOrConnectionString"))))
{
}
y tu hecho
Así que, básicamente, después de finalmente aprender cómo cambiar OpenAuth para no usar DefaultConnection en .NET 4.5 , pasé a 4.5.1, haciendo que esos aprendizajes sean discutibles. Los deberes de AuthConfig.cs ahora residen en Startup.Auth.cs, los métodos estáticos de OpenAuth se han abstraído y, por lo tanto, ya no puedo cambiar el valor predeterminado de OpenAuth.ConnectionString directamente.
¿Cuál es la mejor práctica para cambiar la cadena / base de datos de conexión de Membership en .NET 4.5.1?
He seguido el enfoque que sugirió y funcionó para mí. Sin embargo, hubo pocas cosas, principalmente cuestiones sintácticas y de nomenclatura, que resultaron ser diferentes. Creo que estas diferencias se deben probablemente a las diferentes versiones de Visual Studios que usamos (en lugar de .NET, mi versión es la versión uno con .NET 4.5.1). Continúo con una descripción de mi solución específica.
Mi objetivo era tener un solo contexto de base de datos con el que poder acceder a los datos relacionados con el usuario o la identidad y también con los datos de mi aplicación personalizada. Para lograr esto, eliminé completamente la clase ApplicationDbContext
que se crea automáticamente para usted cuando crea un nuevo proyecto.
Entonces, creé una nueva clase MyDbContext
.
public class MyDbContext: DbContext
{
public MyDbContext() : base("name=DefaultConnection")
{
}
//
// These are required for the integrated user membership.
//
public virtual DbSet<IdentityRole> Roles { get; set; }
public virtual DbSet<ApplicationUser> Users { get; set; }
public virtual DbSet<IdentityUserClaim> UserClaims { get; set; }
public virtual DbSet<IdentityUserLogin> UserLogins { get; set; }
public virtual DbSet<IdentityUserRole> UserRoles { get; set; }
public DbSet<Movie> Movies { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<Purchase> Purchases { get; set; }
}
Los campos Roles
, Users
, UserClaims
, UserLogins
, UserRoles
se sugieren como necesarios para la gestión de membresía. Sin embargo, en mi caso, sus tipos tienen diferentes nombres ( ApplicationUser
lugar de User
, IdentityUserClaim
lugar de UserClaim
etc.). Supongo que esa fue la razón por la cual Antevirus tenía el problema "No se pudo encontrar al usuario".
Además, como vemos en mi caso, hay 5 de estos campos en lugar de 8. Probablemente, esto se debe a las diferentes versiones de Visual Studio.
El último cambio que hice fue en la clase AccountController
y refleja el uso del nuevo contexto MyDbContext
. Aquí pasé una instancia de MyDbContext
lugar de ApplicationDbContext
antes de
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}
Después
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new MyDbContext())))
{
}