8

所以基本上在最终学习了如何在 .NET 4.5 中将 OpenAuth 更改为不使用 DefaultConnection 之后,我转向了 4.5.1,使这些学习变得毫无意义。AuthConfig.cs 的职责现在驻留在 Startup.Auth.cs 中,OpenAuth 的静态方法已被抽象掉,因此我不能再直接更改 OpenAuth.ConnectionString 的默认值。

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

4

2 回答 2

13

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

我的目标是拥有一个数据库上下文,我可以通过它访问用户或身份相关数据以及我的自定义应用程序数据。为了实现这一点,我完全删除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; }
}

字段Roles, Users, UserClaims, UserLogins,UserRoles是会员管理所需的建议。但是,在我的情况下,它们的类型具有不同的名称(ApplicationUser而不是UserIdentityUserClaim而不是UserClaim等)。我想这就是Antevirus出现“找不到用户”问题的原因。

此外,正如我们在我的案例中看到的那样,有 5 个这样的字段,而不是 8 个。这可能是由于 Visual Studio 的不同版本。

我所做的最后一次更改是在课堂上AccountController,它反映了新上下文的使用MyDbContext。这里我传递了一个实例MyDbContext而不是ApplicationDbContext

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new MyDbContext())))
{
}
于 2014-01-04T00:13:49.373 回答
8

发布候选

适用于 Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1

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

IdentityManager = new AuthenticationIdentityManager(new IdentityStore());

IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new DefaultIdentityDbContext("YourNameOrConnectionString")));

你可以走了。

释放

适用于 Microsoft.AspNet.Identity.EntityFramework 1.0.0

与我们为候选发布者所做的类似,但我们在不同的地方执行此操作。打开IdentityModels.cs作为 VS 模板的一部分创建的,并将以下构造函数添加到ApplicationDbContext类中:

public ApplicationDbContext(string nameOrConnectionString)
    : base(nameOrConnectionString)
{
}

现在您可以将无参数构造函数AccountController

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext("YourNameOrConnectionString"))))
{
}

你完成了。

于 2013-11-11T18:36:29.103 回答