C# 在.NET 4.5.1中设置ASP.NET标识连接字符串属性

C# 在.NET 4.5.1中设置ASP.NET标识连接字符串属性,c#,asp.net,visual-studio-2013,C#,Asp.net,Visual Studio 2013,因此,基本上在最终学习之后,我转到了4.5.1,使这些学习变得毫无意义。AuthConfig.cs的职责现在位于Startup.Auth.cs中,OpenAuth的静态方法已被抽象掉,因此我不能再直接更改OpenAuth.ConnectionString的默认值 在.NET 4.5.1中更改成员身份的连接字符串/数据库的最佳做法是什么?候选发行版 适用于Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1 在AccountController的无

因此,基本上在最终学习之后,我转到了4.5.1,使这些学习变得毫无意义。AuthConfig.cs的职责现在位于Startup.Auth.cs中,OpenAuth的静态方法已被抽象掉,因此我不能再直接更改OpenAuth.ConnectionString的默认值

在.NET 4.5.1中更改成员身份的连接字符串/数据库的最佳做法是什么?

候选发行版 适用于Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1

在AccountController的无参数构造函数中,更改行

IdentityManager = new AuthenticationIdentityManager(new IdentityStore());

你可以走了。

释放 适用于Microsoft.AspNet.Identity.EntityFramework 1.0.0

类似于我们对release候选版所做的,但我们在另一个地方做这件事。打开作为VS模板一部分创建的
IdentityModels.cs
,并将以下构造函数添加到
ApplicationDbContext
类中:

public ApplicationDbContext(string nameOrConnectionString)
    : base(nameOrConnectionString)
{
}
现在,您可以从更改
AccountController
中的无参数构造函数

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}
publiccountcontroller()
:此(新的UserManager(新的UserStore(新的ApplicationDbContext()))
{
}

publiccountcontroller()
:此(新的UserManager(新的UserStore(新的ApplicationDbContext(“YourNameOrConnectionString”)))
{
}

你的计划完成了。

我遵循了你建议的方法,它对我有效。然而,几乎没有什么事情是不同的,主要是语法和命名问题。我认为这些差异可能是由于我们使用的Visual Studio版本不同(而不是.NET-我的版本是带有.NET 4.5.1的版本)。我继续描述我的具体解决方案

我的目标是拥有一个DB上下文,通过它我可以访问与用户或身份相关的数据以及自定义应用程序数据。为了实现这一点,我完全删除了类
ApplicationDbContext
,它是在创建新项目时自动为您创建的

然后,我创建了一个新类
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; }
}
之后

publiccountcontroller()
:此(新UserManager(新UserStore(新MyDbContext()))
{
}

你好。我将这些添加到自己的上下文中,但我得到“找不到类型或命名空间名称‘User’(是否缺少using指令或程序集引用?)。这同样适用于所有添加的DbSet。添加Microsoft.AspNet.Identity.EntityFramework作为参考和使用指令。有什么想法吗?@Antevirus看看我提供的新代码。您使用的是Microsoft.AspNet.Identity.EntityFramework的发布版本,因此会出现错误;在库的发布版本中,用户被重命名为IdentityUser。AccountController及其所依赖的类从1.0.0-rc1到1.0.0发生了重大变化。我提供的新代码确实为您提供了单独的DBContext帐户模型和域模型(有时很难防止它们重叠),但它更简单、更安全。请看我编辑的答案。我相信它更容易使用,也更安全。我之前的回答确实将两个DBContext合并为一个,但它从IdentityDbContext中漏掉了一些可能不应该删除的代码。
public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext("YourNameOrConnectionString"))))
{
}
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; }
}
public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}
public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new MyDbContext())))
{
}