2014-03-03 40 views
1

我已经实现了MVC 5 Indentity提供程序作为我的安全模块,并且无法将这些表链接到我现有的数据库,因为我使用的是int主键并且Asp表正在使用GUID。 有谁知道我是否可以将Asp表更改为使用int而不是? 我试图通过Google搜索找到关于该主题的一些信息,但找不到有价值的东西。 我将继续努力,并会在有更多信息时提供有关该主题的详细信息。我只是希望有人能够通过指引我能够提供一些见解的方向来节省我一些时间。使用int主键而不是GUID的MVC 5标识

更多信息:

我的项目,使尽可能使用MVC 5的一些的WebAPI而不是控制器。 我使用实体框架6.

+0

我发现这个职位:http://stackoverflow.com/questions/21383901/asp-net-identity-update-column-type-for-primary-key- id-in-aspnetusers-table-from?s = 1320f1f4-6629-4397-869e-daaefee0d948#new-answer其中提供了有关该主题的更多信息。 – WJK

+0

好的,这里可能会节省空间,但总的来说,如果你关心自动生成的键的*值*,那么你就错了。系统或数据库如何生成ID并不重要,只要它们是唯一的。 –

+0

由于我的数据库已经设计为使用整数作为主键,所以问题更多的是一致性。换句话说,我现有的所有表都有整数键,但现在的表格有GUID – WJK

回答

1

的MSSQL数据库进行通信在这post

所以看看这个答案由hao-kung如果你想INT IDS,你需要创建自己的POCO IUSER类并实现你的IUserStore用于1.0 RTM版本中的自定义IUser类。

这是我们没有时间支持的东西,但是我正在考虑在1.1中使这个更简单(更简单)。希望在不久的将来每晚都能有一些东西可用。

更新,其中1.1-α1例如:如何获得夜间竣工图

如果更新至最新的夜间位,你可以尝试新的1.1-α1的API应该现在做这个简单:这里有什么堵的GUID不是字符串应该像例如

public class GuidRole : IdentityRole<Guid, GuidUserRole> { 
    public GuidRole() { 
     Id = Guid.NewGuid(); 
    } 
    public GuidRole(string name) : this() { Name = name; } 
} 
public class GuidUserRole : IdentityUserRole<Guid> { } 
public class GuidUserClaim : IdentityUserClaim<Guid> { } 
public class GuidUserLogin : IdentityUserLogin<Guid> { } 

public class GuidUser : IdentityUser<Guid, GuidUserLogin, GuidUserRole, GuidUserClaim> { 
    public GuidUser() { 
     Id = Guid.NewGuid(); 
    } 
    public GuidUser(string name) : this() { UserName = name; } 
} 

private class GuidUserContext : IdentityDbContext<GuidUser, GuidRole, Guid, GuidUserLogin, GuidUserRole, GuidUserClaim> { } 
private class GuidUserStore : UserStore<GuidUser, GuidRole, Guid, GuidUserLogin, GuidUserRole, GuidUserClaim> { 
    public GuidUserStore(DbContext context) 
     : base(context) { 
    } 
} 
private class GuidRoleStore : RoleStore<GuidRole, Guid, GuidUserRole> { 
    public GuidRoleStore(DbContext context) 
     : base(context) { 
    } 
} 

[TestMethod] 
public async Task CustomUserGuidKeyTest() { 
    var manager = new UserManager<GuidUser, Guid>(new GuidUserStore(new GuidUserContext())); 
    GuidUser[] users = { 
     new GuidUser() { UserName = "test" }, 
     new GuidUser() { UserName = "test1" }, 
     new GuidUser() { UserName = "test2" }, 
     new GuidUser() { UserName = "test3" } 
     }; 
    foreach (var user in users) { 
     UnitTestHelper.IsSuccess(await manager.CreateAsync(user)); 
    } 
    foreach (var user in users) { 
     var u = await manager.FindByIdAsync(user.Id); 
     Assert.IsNotNull(u); 
     Assert.AreEqual(u.UserName, user.UserName); 
    } 
} 
+0

感谢您的链接!这非常有帮助。我在评论中链接到的文章也指出这篇文章。 – WJK

相关问题