Мне нужно создать базу данных в ядре asp.net 2.2.
Я использую этот метод расширения для auto DBset
в моем проекте.
Я использую этот код для добавления класса в Dbset:
public static void ApplyAllConfigrationEntities(this ModelBuilder builder, params Assembly[] assemblies)
{
MethodInfo applygenericMethod = typeof(ModelBuilder).GetMethods().First(x => x.Name == nameof(ModelBuilder));
IEnumerable<Type> types = assemblies.SelectMany(x => x.GetExportedTypes())
.Where(c => c.IsClass && !c.IsAbstract && c.IsPublic);
foreach (Type type in types)
{
foreach (Type iface in type.GetInterfaces())
{
if (iface.IsConstructedGenericType && iface.GetGenericTypeDefinition() == typeof(IEntityTypeConfiguration<>))
{
MethodInfo applyConcreteMethod = applygenericMethod.MakeGenericMethod(iface.GenericTypeArguments[0]);
applygenericMethod.Invoke(builder, new object[] { Activator.CreateInstance(type) });
}
}
}
}
public static void RegisterAllEntites<BaseType>(this ModelBuilder builder, params Assembly[] assemblies)
{
IEnumerable<Type> types = assemblies.SelectMany(x => x.GetExportedTypes())
.Where(x => x.IsClass && !x.IsAbstract && x.IsPublic && typeof(BaseType).IsAssignableFrom(x));
foreach (Type item in types)
builder.Entity(item);
}
и это ApplicationDbContext
:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var entityAssembly = typeof(IEntity).Assembly;
var ConfigorationAssembly = typeof(IType).Assembly;
base.OnModelCreating(modelBuilder);
modelBuilder.RegisterAllEntites<IEntity>(entityAssembly);
modelBuilder.ApplyAllConfigrationEntities(ConfigorationAssembly);
}
это мои занятия:
public class Category : BaseEntity
{
public string Description { get; set; }
[Column("ParentCategory")]
public int? ParentCategoryId { get; set; }
[ForeignKey("ParentId")]
public Category ParentCategory { get; set; }
public ICollection<Category> Categories { get; set; }
public ICollection<News> News { get; set; }
}
public class News : BaseEntity
{
public string Title { get; set; }
public int WriterId { get; set; }
public DateTime CreateDate { get; set; }
public string Description { get; set; }
public int CategryId { get; set; }
public string ImageName { get; set; }
public User User { get; set; }
public Category Category { get; set; }
}
public class User : BaseEntity
{
public User()
{
IsActive = false;
}
public string Name { get; set; }
public string Family { get; set; }
public string ImageName { get; set; }
public string PhoneNumber { get; set; }
public string Email { get; set; }
public string PasswordHashed { get; set; }
public bool IsActive { get; set; }
public GenderType Gender { get; set; }
public ICollection<News> Posts { get; set; }
}
public enum GenderType
{
[Display(Name = "مرد")]
Male = 1,
[Display(Name = "زن")]
Female = 2
}
public abstract class BaseEntity<TKey> : IEntity
{
public TKey Id { get; set; }
}
public abstract class BaseEntity : BaseEntity<int>
{
}
а это моя Конфигурация в другой сборке:
public class CategoryConfiguration : IEntityTypeConfiguration<Category>, IType
{
public void Configure(EntityTypeBuilder<Category> builder)
{
builder.HasOne(c => c.ParentCategory).WithMany(x => x.Categories).HasForeignKey(f => f.ParentCategoryId);
}
}
public class NewsConfiguration : IEntityTypeConfiguration<News>, IType
{
public void Configure(EntityTypeBuilder<News> builder)
{
builder.HasOne(x => x.Category).WithMany(c => c.News).HasForeignKey(f => f.CategryId);
builder.HasOne(x => x.User).WithMany(c => c.Posts).HasForeignKey(f => f.WriterId);
}
}
но когда я использую Add-Migration initial
, это показывает мне эту ошибку:
Последовательность не содержит соответствующего элемента
в чем проблема? как я могу решить эту проблему?