2014-03-03 38 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

相關問題