#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;
}
}
}