3

在更新到最新的Asp.Net Identity(從1.0到2.0)後,我從DB獲得用戶的CRUD上的異常:Asp.Net Identity 2.0:實體類型用戶不是當前上下文模型的一部分

的實體類型的用戶不是當前上下文

// for example here: 

var manager = Container.Resolve<UserManager<User>>(); 
     IdentityResult result = manager.Create(user, "Test passwd"); 


public class User : IdentityUser 
{ 
    // Some properties 
} 


public class AppDbContext : IdentityDbContext<User> 
{ 
    static AppDbContext() 
    { 
     // Without this line, EF6 will break. 
     Type type = typeof (SqlProviderServices); 
    } 

    public AppDbContext() 
     : this("DBName") 
    { 
    } 

    public AppDbContext(string connectionString) 
     : base(connectionString) 
    { 
    } 

    ... 
} 


protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 

     modelBuilder.Entity<User>() 
      .HasMany(c => c.SkippedTopics) 
      .WithMany(i => i.Users) 
      .Map(t => 
       t.MapLeftKey("User_Id") 
        .MapRightKey("Topic_Id") 
        .ToTable("UserSkippedTopics")); 
    ... 
} 

代碼工作正常更新前的模型的一部分。有任何想法嗎?


UPDATE

的問題是在對的UserManager類型統一的配置。

修復:我創建的空AppUserStore:UserStore並將其註冊爲IUserStore:

public class AppUserStore : UserStore<User> 
{ 
    public AppUserStore(AppDbContext context) : base(context) 
    { 
    } 
} 


... 

public static void RegisterTypes(IUnityContainer container) 
{ 
    ... 

    _container.RegisterType<AppDbContext, AppDbContext>(new InjectionConstructor()); 
    _container.RegisterType<IUserStore<User>, AppUserStore>(); 
} 

回答

4

不應該有UserStore地方?我的意思是看起來像你使用Unity爲DI,我從來沒有使用過,所以我不知道它是如何工作,但通常以實例UserManager你做這樣的事情:

var manager = new UserManager<User>(new UserStore<User>(new AppDbContext())); 
+0

Thanx,你是對的 - 這是Unity的配置問題。修正在UPDATE部分中描述。 –

+0

@dima謝謝哥們。你的回答幫了我很多。 –

0

這只是發生在我身上也從Identity 1.0升級到2.0時。當我在Asp.Net Identity 1.0中創建項目時,Visual Studio的身份代碼支架(如AccountController,ApplicationOAuthProvider,Startup.Auth.cs等)生成。看來Visual Studio有一個更新,現在爲Identity 2.0生成稍微不同的代碼。

我的解決方案是生成一個新的Web應用程序,並將所有(新)生成的代碼複製到我剛剛升級的項目中,替換舊生成的代碼。

1

同樣的事情發生在我身上,它很糟糕。您需要啓用移民並從Nuget管理器控制檯更新您的數據庫。 看看這個博客。 Link is here

相關問題