没有自定义类,Asp.net标识上下文不是映射

时间:2017-02-16 20:43:24

标签: asp.net .net entity-framework asp.net-mvc-4 asp.net-identity

所以,我已经更改了我的应用程序,以便我可以在我的表上使用整数主键(顺便说一句可怕的过程)。一切正常。考虑我的ApplicationDbContext课程:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, CustomRole, int, CustomUserLogin, CustomUserRole, CustomUserClaim>, IIDentityContext
{
    public ApplicationDbContext()
        : base("OwinTestDefault")
    {
        Database.SetInitializer<ApplicationDbContext>(null);
    }
    ...
}

现在考虑,例如,我的用户登录类,完整地:

public class CustomUserLogin : IdentityUserLogin<int>
{
}

为此而必须创建一个类似乎很愚蠢,而且我应该能够在代码中用IdentityuserLogin<int>替换它的任何实例,现在就产生这个:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, CustomRole, int, IdentityUserLogin<int>, CustomUserRole, CustomUserClaim>, IIDentityContext
{
    public ApplicationDbContext()
        : base("OwinTestDefault")
    {
        Database.SetInitializer<ApplicationDbContext>(null);
    }
    ...
}

然而,令人费解的是,它现在不起作用并抛出错误:

  

未映射“Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin`1 [System.Int32]”类型。使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型。验证类型是否已定义为类,不是原始类型还是通用类型,并且不从EntityObject继承。

在周围搜索时,有些人在更改了表名时遇到过这种情况,但我没有这样做,无论如何,重写OnModelCreating并显式映射我能做的一切(表名,键,列名和属性)没有效果,它仍然抱怨它没有映射。另外,在GitHub上查看基类的源代码,无论如何映射都应该没用。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

似乎在Entity Framework中,您无法映射多个级别的泛型类型,因为EF无法从中创建代理。这个答案的道具:Are generic classes not supported as models in Entity Framework?

如果你在源代码中考虑IdentityDbContext.cs,这一行:

public virtual IDbSet<TRole> Roles { get; set; }

真的是:

public virtual IDbSet<IdentityRole<int, IdentityUserRole<int>> Roles { get; set; }

它需要能够从这个类型中创建一个代理作为一个整体,因此使用派生基类的原因是什么。