Tôi đang sử dụng dự án mẫu này (https://github.com/imranbaloch/ASPNETIdentityWithOnion) làm kiến trúc ứng dụng của mình, trong mẫu này lõi được giải mã hoàn toàn từ cơ sở hạ tầng bao gồm khung định danh.Phân tách ASP.NET Identity từ các mô hình miền chính - Kiến trúc Onion
Trong mẫu này tác giả đã sử dụng mẫu bộ điều hợp để phân tách các lớp nhận dạng lõi (IdentityUser, IdentityRole ...) và cung cấp các lớp giống như chúng trong lớp lõi.
Bây giờ vấn đề trong dự án mẫu này là Mô hình miền (Sản phẩm, Hình ảnh) không được liên kết với các lớp giả (AppUser, ApplicationRole, AppliationUserRoles, ...) bắt chước các định danh.
Sau đó, tôi đã sửa đổi mã để thêm các tài liệu tham khảo để AppUser
public sealed class Image : BaseEntity
{
public Image()
{
Products = new HashSet<Product>();
}
public string Path { get; set; }
public AppUser AppUser { get; set; } // The Added Reference ...
public ICollection<Product> Products { get; set; }
}
Nếu tôi đặt "AppUser" bất động sản chuyển hướng bên trong lớp "Hình ảnh", các cơ sở dữ liệu được tạo ra sẽ có BỐN bảng mới khác so với NĂM mặc định của khung định danh.
tôi cần phải hợp nhất các bảng vào những cái mặc định. như thế nào?
EDIT:
Đây là mô hình nhận dạng mà nằm trong Lớp dữ liệu (mà tôi không thể tham khảo từ lõi).
public class ApplicationIdentityUser :
IdentityUser<int, ApplicationIdentityUserLogin, ApplicationIdentityUserRole, ApplicationIdentityUserClaim>, IDomainUser {
public ApplicationIdentityUser()
: base() {
Images = new HashSet<Image>();
}
public string Name { get; set; }
public virtual ICollection<Image> Images { get; set; }
}
public class ApplicationIdentityRole : IdentityRole<int, ApplicationIdentityUserRole>
{
public ApplicationIdentityRole(){}
public ApplicationIdentityRole(string name){Name = name;}
}
public class ApplicationIdentityUserRole : IdentityUserRole<int> {}
public class ApplicationIdentityUserClaim : IdentityUserClaim<int>{}
public class ApplicationIdentityUserLogin : IdentityUserLogin<int>{}
Ngoài ra đây là người xây dựng mô hình của tôi trong phương pháp OnModelCreating:
modelBuilder.Entity<Image>()
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<Image>()
.HasMany(e => e.Products)
.WithRequired(e => e.Image)
.WillCascadeOnDelete(false);
modelBuilder.Entity<ApplicationIdentityUser>()
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<ApplicationIdentityRole>()
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<ApplicationIdentityUserClaim>()
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Bảng AspNet * dư thừa. Cần phải loại bỏ chúng. Kiểm tra ApplicationDbContext của bạn đang làm gì với những bảng này? – trailmax
ApplicationDbContext của tôi là actully lái xe từ IdentityDbContext và tôi cần một cách để lưu trữ thông tin người dùng, bạn có nghĩa là tôi có thể sử dụng các bảng bắt đầu bằng Ứng dụng * không? –
Tôi đang nói rằng chỉ nên có một bộ bảng * Người dùng, * UserClaims, v.v. Dường như cách bạn làm thừa kế trong ApplicationDbContext của bạn bị hỏng và bạn không ghi đè 'Users' và' Roles' và khác, vì vậy EF tạo 2 bộ bảng cho bạn. Kiểm tra điều đó. – trailmax