Asp-Teamの ASP.NET Identity Sample を使用しており、IdentityDbContext
...のデータベースを変更しようとしています。
コンストラクターで試しました
public MyDbContext() : base("MyConnectionString") { } // base is IdentityDbContext
dbContextクラスのように。
ユーザーを登録しようとするまでうまくいきます...
await IdentityStore.CreateLocalUser(user, model.Password)
false
...を返します。エラーなし、何もありません。
それを修正する方法はありますか?
編集:
ファイル名はModels\AppModel.cs
、 そこには MyDbContext class
元々は
public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
}
に変更しました
public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
public MyDbContext() : base("MyConnectionString") { }
}
私は同じものを使用している他のプロジェクトを持っているので、接続文字列は機能しています、そして、彼らはうまく動きます。
<connectionStrings>
<add name="MySailorContext" connectionString="Data Source=THOMAS-LAPTOP;Initial Catalog=MySailor;Integrated Security=True;Pooling=False;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
新しいmvc5アプリケーションのVS2013に付属する1.0バージョンでは、答えはもう有効ではありません。今これを行うには:
次のようなクラスを宣言します。
public class AppUserStore : UserStore<IdentityUser>
{
public AppUserStore():base(new MY_IDENTITYDBCONTEXT())
{
}
}
そして、Startup.Auth.csの変更時に
UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());
に
UserManagerFactory = () => new UserManager<IdentityUser>(new AppUserStore());
これがないと、asp.net IDでユーザーを作成するときにIdentityDbContextコンストラクター(およびOnModelCreating
など)が実行されません。
私は同じ問題を抱えていて、ASP.NET Identityに関する情報がまだネットにあまりないので、少し苦労しました。アセンブリの確認を行った後、実際に簡単であることがわかりました。
AuthenticationIdentityManagerが初期化されている場所を見つけ、IdentityStoreオーバーロードを使用して、次のようにdbコンテキストを指定します。
IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new Model()));
モデルクラスはDbContextを継承します。お役に立てれば。
RobMには包括的な答えがあり、Rob Bには簡単な答えがあります。
このシナリオでは、構成ファイルに存在しない「MyConnectionString」にベースを設定しています。
<connectionStrings>
<add name="MySailorContext" connectionString="Data Source=THOMAS-LAPTOP;Initial Catalog=MySailor;Integrated Security=True;Pooling=False;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
public MyDbContext() : base("MyConnectionString") { }
}
ConnectionStringに付ける名前は、DbContextにあるものと一致する必要があります。
<connectionStrings>
<add name="MySailorContext" connectionString="Data Source=THOMAS-LAPTOP;Initial Catalog=MySailor;Integrated Security=True;Pooling=False;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
public MyDbContext() : base("MySailorContext") { }
}
必要なのがIDプロバイダーによって使用される接続文字列を変更することだけである場合、以下はあまりエレガントではありませんが、動作するようです。 IdentityManagerクラスがインスタンス化される場所を検索し、次を追加します。
//Leave this untouched:
IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
//...and add this:
((IdentityStore)identityManager.Store).DbContext.Configuration
.Database.Connection.ConnectionString = "your connection string here";
IdentityDbConectを継承するクラスを探します。例:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
次に、「DefaultConnection」をweb.configで識別された接続文字列の名前に変更します。
RTMに行くときにこれに多くの変更があるため、すべてのIDサインインなどにWebApiコントローラーを使用するSPAテンプレートを更新しました。あなたがそれを見たことがないなら、それは本当にクールなテンプレートです。
ここにすべてのコードを入れます: https://github.com/s093294/aspnet-identity-rtm/tree/master
(注意してください、それはインスピレーションのためだけです。私はそれを動作させただけで、それ以上は何もしませんでした。適切にバグを1つまたは2つ持っています)。