Я использую этот образец проекта (https://github.com/imranbaloch/ASPNETIdentityWithOnion) в качестве архитектуры моего приложения. , в этом примере ядро полностью декодируется из инфраструктуры, включая структуру идентификации.
В этом примере автор использовал шаблон адаптера для разделения основных классов идентификации (IdentityUser, IdentityRole ...) и предоставления таких классов на уровне ядра.
Теперь проблема в этом примере проекта заключается в том, что модель домена (продукт, изображения) не связана с фиктивными классами (AppUser, ApplicationRole, AppliationUserRoles, ...), которые имитируют классы Identity.
Затем я изменил код, добавив ссылку на 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; }
}
Если я помещу свойство навигации «AppUser» в класс «Image», созданная база данных будет иметь ЧЕТЫРЕ новых таблицы, кроме ПЯТИ таблиц по умолчанию структуры идентификации.
Мне нужно объединить эти таблицы с таблицами по умолчанию. как ?
РЕДАКТИРОВАТЬ:
Это модели идентичности, которые находятся на уровне данных (на которые я не могу ссылаться из ядра).
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>{}
Также это мой конструктор моделей в методе 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);
Users
,Roles
и другие, поэтому EF создает для вас 2 набора таблиц. Проверьте это. - person trailmax   schedule 27.10.2014IDbset
s выглядят в ApplicationDbContext? - person trailmax   schedule 27.10.2014