Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 有没有一种方法可以使用IEnumerable/对象列表,以代码优先的方式为EF核心植入种子?_Entity Framework_Asp.net Core_Entity Framework Core_Asp.net Core Mvc - Fatal编程技术网

Entity framework 有没有一种方法可以使用IEnumerable/对象列表,以代码优先的方式为EF核心植入种子?

Entity framework 有没有一种方法可以使用IEnumerable/对象列表,以代码优先的方式为EF核心植入种子?,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创建第一个迁移,我想读取文件图像的标题并创建一个对象列表,用所述对象列表为数据库种子,我有一个类 从接口IPProductRepository继承的哪个类包含一个我一直试图找到的对象产品列表?如果使用EF Core 2.2,我是否能够创建一个产品列表?在OnModelCreating的重载上不使用任何静态方法?或者在创建第一次迁移之后 公共类ProductRepository:IPProductRep

我有一个asp.net core 2.2项目,我正在为Entity framework core创建第一个迁移,我想读取文件图像的标题并创建一个对象列表,用所述对象列表为数据库种子,我有一个类

从接口IPProductRepository继承的哪个类包含一个我一直试图找到的对象产品列表?如果使用EF Core 2.2,我是否能够创建一个产品列表?在OnModelCreating的重载上不使用任何静态方法?或者在创建第一次迁移之后

公共类ProductRepository:IPProductRepository

    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>();```


 


公共接口存储库
{
产品添加产品(产品p);
产品删除(Guid Id);
产品更新产品(产品p);
IEnumerable GetAllProduct();
产品GetProduct(Guid id);
IEnumerable GetProductBy(ProductType类型);
}```
```公共列表产品列表=新列表()```

对于任何有相同问题的人,我在一段时间后发现了一个解决方案,以编程方式注入接口并保存迁移,以避免冲突删除任何保存的迁移。。。这会奏效的。不要手动迁移

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


    }
{
公共静态bool InitializeDB(此AppDbContext上下文,IPProductRepository productRepositoryMock=null,IPProductRepository mock=null)
{
var items=productRepositoryMock.GetAllProducts();
整数计数=0;
foreach(项目中的var项目)
{
var found=context.Products.Select(x=>x.ProductName==item.ProductName).Any();
如果(!找到)
{
context.Products.Add(项目);
计数++;
}
}
SaveChanges();
context.initialized=0x01;
返回计数>0;
}
需要公共静态bool保证数据库(此IAApplicationBuilder applicationBuilder、IPProductRepositoryMock、IHostingEnvironment env、bool自动迁移数据库)
{
//使用扩展方法为数据库设置种子
使用(var serviceScope=applicationBuilder.ApplicationServices)
.GetRequiredService().CreateScope())
{
var ctx=serviceScope.ServiceProvider.GetService();
if(自动迁移数据库)
{
ctx.Database.Migrate();
}
var res=ctx.InitializeDB(模拟);
serviceScope.ServiceProvider.GetService().Database.Migrate();
返回res;
}
}
}

我不确定我是否理解你的问题。。你读过这本书了吗,看它对你有用吗?我认为应该。