есть ли способ заполнить ядро EF с помощью подхода code first с помощью IEnumerable / List объектов?

#entity-framework #asp.net-core #entity-framework-core #asp.net-core-mvc

#entity-framework #asp.net-core #entity-framework-core #asp.net-core-mvc

Вопрос:

У меня есть asp.net проект core 2.2, в котором я создаю первую миграцию для Entity framework core, и я хочу прочитать заголовок изображения файла и создать список объектов для заполнения базы данных указанным списком объектов, у меня есть класс

который наследуется от интерфейса IProductRepository указанный класс содержит список объектов Product, которые я пытался найти, если с EF Core 2.2 я смогу заполнить список продуктов? без использования какого-либо статического метода при перегрузке OnModelCreating? или, возможно, после создания первой миграции?

public class ProductRepository : IProductRepository

     public interface IProductRepository
    {
        Product AddProduct(Product p);
        Product Delete(Guid Id);
        Product UpdateProduct(Product p);
        IEnumerable<Product> GetAllProduct();
        Product GetProduct(Guid id);
        IEnumerable<Product> GetProductBy(ProductType type);
    }```

 

```public List<Product> productsList = new List<Product>();```


 


  

Комментарии:

1. Я не уверен, что понимаю ваш вопрос.. Вы прочитали встроенные документы по заполнению , чтобы узнать, сработает ли это для вас? Я думаю, так и должно быть.

Ответ №1:

для всех, у кого есть такой же вопрос, я нашел решение некоторое время назад, внедрив интерфейс и сохранив миграцию программно, чтобы избежать конфликтов, удалите все сохраненные миграции… и это сработало бы. и не выполняйте ручную миграцию

     {
        public static bool InitializeDB(this AppDbContext context, IProductRepository productRepositoryMock = null, IProductRepository  mock= null)
        {
            var items = productRepositoryMock.GetAllProducts();
            int count = 0;
            foreach (var item in items)
            {
                var found = context.Products.Select(x => x.ProductName == item.ProductName).Any();
                if (!found)
                {
                    context.Products.Add(item);
                    count  ;
                }
            }
            context.SaveChanges();
            context.initialized = 0x01;
            return count > 0;
        }

        public static bool  EnsureDatabaseIsSeeded(this IApplicationBuilder applicationBuilder, IProductRepositoryMock mock, IHostingEnvironment env, bool autoMigrateDatabase)
        {
            // seed the database using an extension method
            using (var serviceScope = applicationBuilder.ApplicationServices
           .GetRequiredService<IServiceScopeFactory>().CreateScope())
            {
                var ctx= serviceScope.ServiceProvider.GetService<AppDbContext>();
                if (autoMigrateDatabase)
                {
                    ctx.Database.Migrate();
                }
                var res = ctx.InitializeDB(mock);
                serviceScope.ServiceProvider.GetService<AppDbContext>().Database.Migrate();
                return res;
            }
        }


    }