2013-10-28 7 views
12

株式asp.net MVC 5アプリケーションは、「IdentityModels.cs」と呼ばれるファイルという名前のアプリケーション・ユーザー、別のコンテキスト内の別名アイデンティティユーザを作成します - それは私が入れしようとしています。このアプリケーションのユーザーを他のオブジェクトと同じコンテキストでどのように配置できますか?

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
} 

のように見えますしかし、この

public class BlogProphetContext : DbContext 
    { 

     public DbSet<ApplicationUser> ApplicationUsers { get; set; } 
     public DbSet<Answer> Answers { get; set; } 
     public DbSet<Question> Questions { get; set; } 
     public DbSet<Tag> Tags { get; set; } 
    } 

のような定期的なデータ、すなわち文脈、何かのアプリケーションのユーザーは、私は次のエラーを毎回得ることをやるたびに私はアカウントを作成しよう

The UserId field is required 
AccountController.csで10

私はコード

result = await UserManager.AddLoginAsync(user.Id, info.Login); 

の次の行をexecureしようとすると、私は感じて、私のアプローチは間違っている、と私はいくつかの並べ替えなしに、メイン・データ・コンテキストファイルにするApplicationUsersを持つことができないことを取得誰もがこれを行うための何らかの方法を知っていますか?すべてのファイルが最新です。

答えて

12

をこれは少しも簡単だった - それはすべてあなたのことが判明それをしなければならないあなたがコンテキストを呼び出し、すべてはあなたのよう判明したとき(つまり、MVCの前提と開発者の想定(この場合は、鉱山)の同期を期待するかもしれない

<ApplicationUser> 

を削除。

ここで私は実際にはまったくIdentityDbContext を使用していない、正しく

public class MyContext : IdentityDbContext 
    { 
     public MyContext() 
      : base("DefaultConnection") 
     { 
     } 
     public DbSet<ApplicationUser> ApplicationUsers { get; set; } 
     public DbSet<Answer> Answers { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 
      modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
     } 
    } 
+0

ライフセーバー、これも私を悩ましていました。アイデンティティ・サブシステムのためのものと私のプロジェクトのための他のすべてのデータのためのものという2つのコンテキストを持つという考えが嫌でした! – xingyu

0

は、私は私が完全にあなたの質問を理解している場合、これはあなたを助けるかかどうかわからない...しかし、あなたがあなた自身の「モデル」を使ってみたい場合は、その後変更:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("PUT IN YOUR MODEL CONN HERE") 
    { 
    } 

私はどのくらいかわかりませんこれ以上設定することはできません。

2

ApplicationUserクラスがIdentityUserから継承されていることを確認してください。

次に、すべてのASP.NET IDクラスを正しくマップするようにコンテキストを構成する必要があります。 これらは次のとおりです。

  1. ApplicationUser(クラス)
  2. IdentityUserClaim
  3. IdentityUserLogin
  4. IdentityUserRole
  5. IdentityRoleこれはここに投稿するビットが複雑すぎるの

詳細が、私はASP.NET Identityのリリース版で動作するサンプルプロジェクトを作成しました。 https://github.com/onybo/Asp.Net-Identity-sample-app/tree/master/CustomUser

+0

取り組んでいるが、私は(拡張機能や関連するプロパティのために他のクラス、などのようなApplicationUserを治療したいと思いますが - それはでしたベータ版では奇妙なことに働いています)IdentityDBContextを全く使わない方法があるのだろうかと思います。 –

+0

そして、私は最新のリリースですべてを最新にしています - 今質問を更新しています。 –

+0

私は自分の答えを更新し、あなたが探していると思われる作業中のプロジェクトへのリンクを含めました –

3

この場合、ApplicationUserをasp.netアイデンティティと関連付ける必要がない場合、最も簡単なことは、applicationUserクラスから継承を削除することです。

ApplicationUserから:IdentityUserだけをApplicationUserに移動し、そのクラスでIdプロパティを作成します。

次に、IdentityDBContextを使用する必要はありません。

もちろん、AccountControllerを完全に書き直すか、取り除かなくてはなりません。とにかくUserManagerをIdentityUserにリンクされたものとして使用することはできません

EFで作業している場合は、移行/更新データベースを必ず追加してください。

あなたがあるとしてアカウントコントローラを維持し、IdentityDbContextを続けるが、その後のthats簡単に他のエンティティを追加したいならば、ちょうどこの操作を行います。

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() : base("DefaultConnection") 
    { 
    } 

    public DbSet<Dept> Dept{ get; set; } 
    public DbSet<Course> Course{ get; set; } 
    public DbSet<Etc> Etc{ get; set; } 
} 
関連する問題