12

Tôi muốn sử dụng System.Guid nhập làm id cho tất cả các bảng của tôi trong ứng dụng api web asp.net. Nhưng tôi cũng sử dụng Asp.net Identity, sử dụng một mã số -type (để lưu trữ các hướng dẫn). Vì vậy, tôi tự hỏi tại sao nó sử dụng chuỗi id thay vì System.Guid theo mặc định? Và lựa chọn nào tốt hơn để sử dụng thông qua tất cả ứng dụng - Hướng dẫn id hoặc chuỗi -ID id? Trong trường hợp sử dụng chuỗi - cách thích hợp nhất và đáng tin cậy để tạo id - mã mới hoặc trong cơ sở dữ liệu là gì?Tại sao asp.net Identity id người dùng là chuỗi?

+0

"Lý do" được giải thích [ở đây] (http://stackoverflow.com/q/19238621/304683) - cả hai câu trả lời trong bài đăng đó sẽ thực sự hữu ích. Hth. – EdSF

+0

Cảm ơn @EdSF, nhưng tôi vẫn có một câu hỏi mở về cách tốt nhất để tổ chức ứng dụng - chuỗi-guids hoặc Guids (uniqueidentifier) ​​cho id là gì? – Ostap

+0

Tùy thuộc vào yêu cầu _your_. Xem [câu trả lời của Rick Anderson (MSFT)] (http://stackoverflow.com/a/24152085/304683) để được hướng dẫn. – EdSF

Trả lời

0

Tùy thuộc vào phiên bản của xác thực ASP.Net bạn đang sử dụng, trên cơ sở dữ liệu ASP.NET Identity v2 nên lưu trữ nó dưới dạng bộ định danh duy nhất (Guid) trong bảng AspNetUsers. Trong nhiều phiên bản trước, nó sẽ lưu trữ id người dùng như một int trong bảng webpages_Membership.

Tôi tin rằng nó hiển thị nó như một chuỗi để nó có thể là bất kỳ loại dữ liệu nào bạn thích dưới mui xe và sau đó bạn có thể đưa nó vào trong mã theo yêu cầu.

+0

Hi Tim, tôi đang sử dụng phiên bản mới nhất của hệ thống thành viên cho ASP.NET - ASP.NET Identity. Tôi vẫn không chắc chắn, thực hành tốt nhất để sử dụng chuỗi cho tất cả các bảng trong cơ sở dữ liệu của tôi hoặc chuyển đổi mọi thứ thành GUID là gì? – Ostap

+0

@ user3460585 int vs Hướng dẫn là đối số tuổi. Xem các câu trả lời sau: http://dba.stackexchange.com/a/266/6868 http://blog.codinghorror.com/primary-keys-ids-versus-guids/ http://programmers.stackexchange.com/a/189031/86760 – trailmax

+0

Xin lỗi, tôi không nhận ra bạn đang yêu cầu cơ sở dữ liệu của bạn. Nói chung những gì chúng tôi làm là lưu trữ tên người dùng chống lại một hồ sơ người dùng trong cơ sở dữ liệu của chúng tôi mà sau đó chúng tôi có thể tham khảo hồ sơ ASP.Net, nó cũng detaches bạn từ tầng thành viên cơ bản. – Tim

5

Với ASP.NET Core, bạn có một cách rất đơn giản để chỉ định loại dữ liệu bạn muốn cho các mô hình của Identity.

Bước đầu tiên, các lớp sắc override từ < string>-< loại dữ liệu bạn muốn>:

public class ApplicationUser : IdentityUser<Guid> 
{ 
} 

public class ApplicationRole : IdentityRole<Guid> 
{ 
} 

Khai báo bối cảnh cơ sở dữ liệu của bạn, sử dụng các lớp học của bạn và loại dữ liệu bạn muốn:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid> 
    { 
     public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
      : base(options) 
     { 
     } 

     protected override void OnModelCreating(ModelBuilder builder) 
     { 
      base.OnModelCreating(builder); 
      // Customize the ASP.NET Identity model and override the defaults if needed. 
      // For example, you can rename the ASP.NET Identity table names and more. 
      // Add your customizations after calling base.OnModelCreating(builder); 
     } 
    } 

Và trong lớp khởi động, hãy khai báo dịch vụ nhận dạng bằng các mô hình của bạn và khai báo loại dữ liệu bạn muốn cho phần tử gốc ary keys:

services.AddIdentity<ApplicationUser, ApplicationRole>() 
      .AddEntityFrameworkStores<ApplicationDbContext, Guid>() 
      .AddDefaultTokenProviders(); 
+1

Để biết thông tin, hiện có một chủ đề trong tài liệu chính thức: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-primary-key-configuration – AdrienTorris

Các vấn đề liên quan