2016-09-05 9 views
0

Identityを導入するまでは、すべて正常に機能していました。エンティティタイプ 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin <string>'には、キーを定義する必要があります。

私はあることを私のコンテキストクラスを変更:

public partial class VisualJobsDbContext : IdentityDbContext<ApplicationUser> 
{ 
    private IConfigurationRoot _config; 

    public VisualJobsDbContext() { } 

    public VisualJobsDbContext(IConfigurationRoot config, DbContextOptions options) : base(options) 
    { 
     _config = config; 
    }... 

と私は形で宣言されている一般的なリポジトリがあります。エラーが

に発生し

public abstract class GenericRepository<C,T> : IGenericRepository<T> where T : class where C : IdentityDbContext<ApplicationUser>, new() 
{ 
    private C _entities = new C(); 
    private VisualJobsDbContext context; 
    private DbSet<T> dbSet; 

    public GenericRepository(VisualJobsDbContext context) 
    { 
     this.context = context; 
     this.dbSet = context.Set<T>(); 
    }.... 

をthis.dbSet = context.Set <>();

最初にヒットします。私のOnModelCreatingメソッドが呼び出されます。 MVCアプリケーションから取得しようとしているページは一般的なページなのでログインは必要ありませんが、ログインが必要な領域があります。しかし、エラーの前に私のコントローラのConstructorメソッドを取得することはできません。私が持っているサービスを登録するには:

services.AddIdentity<ApplicationUser, IdentityRole>() 
      .AddEntityFrameworkStores<VisualJobsDbContext>() 
      .AddDefaultTokenProviders(); 

と私はこのステップを実行できます。

アイデア何が欠けていますか?私はこのstackoverflow answerとその他を見てきましたが、実際には役に立ちません

+0

コンテキストがnullに渡されていますか?それは行動を引き起こすでしょう。 –

+0

こんにちは@ShawnWildermuthを見てくれてありがとう。はい、私の文脈には人が住んでいます。私が 'typeof(T)'を直接ウィンドウに表示すると、それが 'Agent'オブジェクトに設定されていることがわかります。コンテキストではエージェントオブジェクトも見ることができます。エージェントオブジェクトと他のすべてのアプリケーションオブジェクトには、アプリケーションユーザーへの参照がありません。これを継承するために私のモデルオブジェクトはすべて必要ですか? – bilpor

+0

それはそうではありません。アプリケーションオブジェクトから継承するエージェントオブジェクトを設定しましたが、このオブジェクトではまだ失敗しました – bilpor

答えて

6

私のOnModelCreatingメソッドで。私は最初のコード行としてbase.OnModelCreating(modelBuilder);を配置する必要がありました。

関連する問題