【问题标题】:Asp.Net Identity 2.0: The entity type User is not part of the model for the current contextAsp.Net Identity 2.0:实体类型 User 不是当前上下文模型的一部分
【发布时间】:2014-04-01 17:44:42
【问题描述】:

更新到最新的 Asp.Net Identity(从 1.0 到 2.0)后,我从 DB 中得到了一个用户的 CRUD 异常:

实体类型 User 不是当前上下文模型的一部分

// 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"));
    ...
}

在更新之前,代码可以正常工作。有什么想法吗?


更新

问题在于 UserManager 类型的 Unity 配置中。

修复:我创建了空的 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>();
}

【问题讨论】:

    标签: asp.net entity-framework dependency-injection unity-container asp.net-identity


    【解决方案1】:

    在某处不应该有UserStore 吗?我的意思是看起来你正在使用Unity 用于我从未使用过的 DI,所以我不知道它是如何工作的,但通常实例化 UserManager 你会这样做:

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

    【讨论】:

    • 谢谢,你是对的 - 这是 Unity 配置问题。更新部分描述了修复。
    • @dima 谢谢哥们。你的回答对我帮助很大。
    【解决方案2】:

    同样的事情发生在我身上,这很糟糕。您需要从 Nuget 管理器控制台启用和更新您的数据库。 看看这个博客。 Link is here

    【讨论】:

      【解决方案3】:

      从 Identity 1.0 升级到 2.0 时,我也遇到了这种情况。我在 Asp.Net Identity 1.0 中创建项目时生成了 Visual Studio 的身份代码脚手架(例如 AccountController、ApplicationOAuthProvider、Startup.Auth.cs 等)。似乎 Visual Studio 进行了更新,现在生成的 Identity 2.0 代码略有不同。

      我的解决方案是生成一个新的 Web 应用程序并将所有(新)生成的代码复制到我刚刚升级的项目中,替换旧的生成代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        • 1970-01-01
        • 2016-08-31
        • 2017-06-01
        • 2019-03-16
        • 2013-11-10
        • 2014-11-30
        相关资源
        最近更新 更多