所以,我已经更改了我的应用程序,以便我可以在我的表上使用整数主键(顺便说一句可怕的过程)。一切正常。考虑我的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上查看基类的源代码,无论如何映射都应该没用。
有什么想法吗?
答案 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; }
它需要能够从这个类型中创建一个代理作为一个整体,因此使用派生基类的原因是什么。