8

したがって、基本的に、OpenAuth を変更して .NET 4.5で DefaultConnection を使用しないようにする方法を最終的に学んだ後、4.5.1 に移行し、それらの学習を意味のないものにしました。AuthConfig.cs の役割は Startup.Auth.cs に置かれるようになりました。OpenAuth の静的メソッドは抽象化されているため、OpenAuth.ConnectionString の既定値を直接変更することはできなくなりました。

.NET 4.5.1 でメンバーシップの接続文字列/データベースを変更するためのベスト プラクティスは何ですか?

4

2 に答える 2

13

私はあなたが提案したアプローチに従いましたが、それは私にとってはうまくいきました。ただし、主に構文と命名の問題がいくつかあり、たまたま異なっていました。これらの違いは、おそらく使用した Visual Studio のバージョンが異なるためだと思います (.NET ではなく、私のバージョンは .NET 4.5.1 のリリース 1 です)。私は、私の特定のソリューションの説明を続けます。

私の目標は、単一の DB コンテキストを使用して、ユーザーまたは ID 関連のデータとカスタム アプリケーション データの両方にアクセスできるようにすることでした。これを達成するために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; }
}

フィールドRolesUsersUserClaims、はUserLoginsUserRoles提案されているように、メンバーシップ管理に必須です。ただし、私の場合、それらのタイプの名前は異なります(ApplicationUser代わりにUser、およびなどIdentityUserClaimの代わりにUserClaim)。それが、Antevirus に「ユーザーが見つからない」という問題があった理由だと思います。

また、私の場合、このようなフィールドが 8 つではなく 5 つあることがわかります。おそらく、これは Visual Studio のバージョンが異なるためです。

私が行った最後の変更はクラスAccountControllerで、新しいコンテキストの使用を反映していますMyDbContextMyDbContextここでは、代わりにのインスタンスを渡しました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.csVS テンプレートの一部として作成されたものを開き、次のコンストラクターをクラスに追加します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 に答える