Ошибка «Последовательность не содержит соответствующий элемент» в ядре ASP.net - PullRequest
0 голосов
/ 13 марта 2019

Мне нужно создать базу данных в ядре 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, это показывает мне эту ошибку:

Последовательность не содержит соответствующего элемента

в чем проблема? как я могу решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...