ef-code-first – ASP.NET Identity – 将用户ID主键默认类型从字符串更改为int时和使用
|
我正在使用Microsoft.AspNet.Identity 2.0.0-beta1和Entity Framework 6.1.0-beta1(2014年2月11日发布). 当我尝试将用户ID主键的默认类型从字符串更改为int时以及当我尝试使用自定义表名(因此User.MyUsers而不是dbo.AspNetUsers)时,我收到以下错误: “实体类型’IdentityUser’和’ApplicationUser’不能共享表’MyUsers’,因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系,它们之间具有匹配的主键.” 我可以成功地将用户ID PK的默认类型从字符串更改为int或更改默认的标识表名称,但我不能同时执行这两个操作而不会出现此错误. 我的解决方案基于: 1:从http://blogs.msdn.com/b/webdev/archive/2013/12/20/announcing-preview-of-microsoft-aspnet-identity-2-0-0-alpha1.aspx开始的“使用户和角色的主键类型可扩展”部分. 2:How can I change the table names when using Visual Studio 2013 ASP.NET Identity?. 我的实际代码是: using Microsoft.AspNet.Identity.EntityFramework;
namespace Musetone.Models
{
public class ApplicationUser : IdentityUser<int,CustomUserLogin,CustomUserRole,CustomUserClaim>
{
}
public class CustomRole : IdentityRole<int,CustomUserRole>
{
public CustomRole() { }
public CustomRole(string name) { Name = name; }
}
public class CustomUserRole : IdentityUserRole<int> { }
public class CustomUserClaim : IdentityUserClaim<int> { }
public class CustomUserLogin : IdentityUserLogin<int> { }
public class ApplicationDbContext : IdentityDbContext<ApplicationUser,CustomRole,int,CustomUserClaim>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers","User").HasKey(u => u.Id).Property(u => u.Id).HasColumnType("int");
modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers","User").HasKey(u => u.Id).Property(u => u.Id).HasColumnType("int");
modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles","User").HasKey(r => new { r.RoleId,r.UserId }).Property(r => r.UserId).HasColumnType("int");
modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins","User").HasKey(l => new { l.UserId,l.LoginProvider,l.ProviderKey }).Property(l => l.UserId).HasColumnType("int");
modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims","User").Property(c => c.UserId).HasColumnType("int");
modelBuilder.Entity<IdentityRole>().ToTable("MyRoles","User").HasKey(r => r.Id);
}
}
}
即使我删除HasColumnType(“int”),我也会收到此错误. 任何帮助将不胜感激. 解决方法我认为映射可能不正确.在定义ApplicationDbContext类时,您使用为通用的角色,登录和声明定义的自定义类,但是传递用于映射表的基类.对于ChangePK示例,以下映射对我有用.如果这也适合你,请告诉我.映射应该足够简单protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers");
modelBuilder.Entity<CustomUserRole>().ToTable("MyUserRoles");
modelBuilder.Entity<CustomUserLogin>().ToTable("MyUserLogins");
modelBuilder.Entity<CustomUserClaim>().ToTable("MyUserClaims");
modelBuilder.Entity<CustomRole>().ToTable("MyRoles");
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 未指定SMTP主机
- asp.net – Google OpenId:找不到OpenID端点(间歇性)
- asp.net – 从wsdl生成webservice
- ASP.NET MVC通过ActionLink传递模型
- asp.net – $(“#dialog”).parent().appendTo($(“form:f
- asp.net-mvc-3 – 依赖注入与多个类实现的接口
- asp.net-mvc – 使ASP.MVC2/VS2010应用程序在IIS 7.5中工作
- 将ASP.NET应用程序连接到QuickBooks Online Edition
- ASP.NET AJAX:在页面加载完成后触发UpdatePanel
- 如何保持我的ASP.NET应用程序始终“活着”,如果它是一个坏主
- asp.net – 以URL结尾的问题
- asp.net-mvc – MVC HTML.RenderAction – 错误:
- asp.net-mvc-3 – AZURE ACS – Windows Live ID
- asp.net-mvc – 将.html文件渲染为ASP.NET MVC中
- asp.net – 将单元测试慢慢集成到项目中的步骤
- asp.net-mvc – ASP.Net MVC:dbml文件的最佳实践
- 从ASP.NET应用程序使用Active Directory时,Direc
- 如何在ASP.NET核心rc2中禁用浏览器缓存?
- asp.net – 如何在Web应用程序中使用ServiceStac
- asp.net – 我应该在哪里放置scriptmanager
