Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
C# 实体框架核心-数据库未填充_C#_Asp.net_Entity Framework_Asp.net Core - Fatal编程技术网

C# 实体框架核心-数据库未填充

C# 实体框架核心-数据库未填充,c#,asp.net,entity-framework,asp.net-core,C#,Asp.net,Entity Framework,Asp.net Core,我试图用我的StoreInitializer填充数据库,但表是空的,我使用的是Entity Framework Core和ASP.NET Core,我想在Package Manager控制台中配置我的Initializer以使用更新数据库。我遵循了本教程,但在开始或更新时,数据库还是空的。VisualStudio没有显示任何错误 StoreInitializer.cs: namespace PC_SHOP.DAL { public static class StoreInitialize

我试图用我的StoreInitializer填充数据库,但表是空的,我使用的是Entity Framework Core和ASP.NET Core,我想在Package Manager控制台中配置我的Initializer以使用更新数据库。我遵循了本教程,但在开始或更新时,数据库还是空的。VisualStudio没有显示任何错误

StoreInitializer.cs:

namespace PC_SHOP.DAL
{
    public static class StoreInitializer
    {


        public static void Initialize(StoreContext context)
        {

            context.Database.EnsureCreated();

            if (context.Electronics.Any())
            {
                return;
            }


            // Działy główne
            var electronics = new Electronic[]
            {
                new Electronic { ID=1, Name = "Laptopy"},
                new Electronic { ID=2, Name = "Komputery"},
                new Electronic { ID=3, Name = "Części PC"},
                new Electronic { ID=4, Name = "Dla graczy"},
                new Electronic { ID=5, Name = "Peryferia PC"},
                new Electronic { ID=6, Name = "Sieci i komunikacja"},
                new Electronic { ID=7, Name = "Oprogramowanie"},

            };

            foreach (Electronic e in electronics)
            {
                context.Electronics.Add(e);
            }

            context.SaveChanges();



            // Rodzaje laptopów
            var laptops = new List<Laptop>
            {
                new Laptop { ID=1, Name = "Laptopy", ElectronicID = 1, IconFileName = "1_laptop.jpg"},
                new Laptop { ID=2, Name = "Laptopy Apple", ElectronicID = 1, IconFileName = "2_apple.jpg"},

            };

            foreach (Laptop l in laptops)
            {
                context.Laptops.Add(l);
            }

            context.SaveChanges();


        }


    }
}

EnsureCreated可用于在原型设计和测试场景中创建数据库和表。它应该与迁移一起使用,而不是与迁移一起使用。只有当数据库不存在或不包含表时,它才会创建数据库。在其他情况下,它将一事无成

请注意,如果数据库存在,它将不会执行任何操作,因此需要使用不存在的数据库名称


实际上,您应该从comand行生成迁移,然后从初始值设定项运行迁移,而不是使用.recreated。“重新创建”用于每次创建的内存中数据库。ie原型制作。

可在原型制作和测试场景中使用重新创建的数据库和表。它应该与迁移一起使用,而不是与迁移一起使用。只有当数据库不存在或不包含表时,它才会创建数据库。在其他情况下,它将一事无成

请注意,如果数据库存在,它将不会执行任何操作,因此需要使用不存在的数据库名称

实际上,您应该从comand行生成迁移,然后从初始值设定项运行迁移,而不是使用.recreated。“重新创建”用于每次创建的内存中数据库。ie原型设计。

好的,我修复了

我在Startup.cs文件中添加了上下文参数来配置方法。其他一切都没有改变

public void Configure(IApplicationBuilder app, IHostingEnvironment env, StoreContext context )
{
    ...
    //After app.UseMvc()
    StoreInitializer.Initialize(context);
}
它正确地填充了我的数据库

我在Startup.cs文件中添加了上下文参数来配置方法。其他一切都没有改变

public void Configure(IApplicationBuilder app, IHostingEnvironment env, StoreContext context )
{
    ...
    //After app.UseMvc()
    StoreInitializer.Initialize(context);
}

它正确地填充了我的数据库

将这一行添加到Program.cs Main()方法: StoreInitializer.Initialize(上下文)

public static void Main(string[] args)
{
      //CreateWebHostBuilder(args).Build().Run();
      var host = CreateWebHostBuilder(args).Build();
      using (var scope = host.Services.CreateScope())
      {
            var services = scope.ServiceProvider;
            try
            {
                  var context = services.GetRequiredService<AppDbContext>();
                  //context.Database.EnsureCreated();
                  DbInitializer.Initialize(context);
            }
            catch (Exception ex)
            {
                  var logger = services.GetRequiredService<ILogger<Program>>();
                  logger.LogError(ex, "An error occurred creating the DB.");
            }
      }
      host.Run();
}
publicstaticvoidmain(字符串[]args)
{
//CreateWebHostBuilder(args.Build().Run();
var host=CreateWebHostBuilder(args.Build();
使用(var scope=host.Services.CreateScope())
{
var services=scope.ServiceProvider;
尝试
{
var context=services.GetRequiredService();
//context.Database.recreated();
初始化(上下文);
}
捕获(例外情况除外)
{
var logger=services.GetRequiredService();
logger.LogError(例如,“创建数据库时出错”);
}
}
host.Run();
}

将此行添加到Program.cs Main()方法: StoreInitializer.Initialize(上下文)

public static void Main(string[] args)
{
      //CreateWebHostBuilder(args).Build().Run();
      var host = CreateWebHostBuilder(args).Build();
      using (var scope = host.Services.CreateScope())
      {
            var services = scope.ServiceProvider;
            try
            {
                  var context = services.GetRequiredService<AppDbContext>();
                  //context.Database.EnsureCreated();
                  DbInitializer.Initialize(context);
            }
            catch (Exception ex)
            {
                  var logger = services.GetRequiredService<ILogger<Program>>();
                  logger.LogError(ex, "An error occurred creating the DB.");
            }
      }
      host.Run();
}
publicstaticvoidmain(字符串[]args)
{
//CreateWebHostBuilder(args.Build().Run();
var host=CreateWebHostBuilder(args.Build();
使用(var scope=host.Services.CreateScope())
{
var services=scope.ServiceProvider;
尝试
{
var context=services.GetRequiredService();
//context.Database.recreated();
初始化(上下文);
}
捕获(例外情况除外)
{
var logger=services.GetRequiredService();
logger.LogError(例如,“创建数据库时出错”);
}
}
host.Run();
}

您在哪里调用
DbInitializer.Initialize()
?当程序在program.cs中使用method Main(描述中的watch link)启动时,或通过稍后使用Update database的迁移启动时,您是否确定已传递该方法且未发生异常?另外,您使用哪种方法来确保数据库是空的?我用myslef:)删除了它,并且没有填充新的数据库,vs2017显示我没有错误,更新显示消息:“完成”。当程序在program.cs中使用方法Main启动时,您在哪里调用
DbInitializer.Initialize()
或者通过使用Update database Laters进行迁移您确定方法已通过并且没有异常发生吗?另外,您使用哪种方法来确保数据库是空的?我用myslef:)删除了它,并且没有填充新的数据库,vs2017显示我没有错误,更新显示消息:“完成”。我正在使用msn的教程,为什么在他们的数据库上工作??填充物呢?我已经删除了db,但没有结果,在clear db和Nothing上创建。我想你应该阅读整个系列,以正确的方式完成它,而不是一步一步地遵循每个教程。在同一系列的本教程中,我看到他们在迁移中正确地使用了相同的项目,但是如果数据库根本不存在,它应该可以工作,它应该创建并填充数据库。例如,它应该与内存中的提供程序一起工作,那么我做错了什么?它创建了表,但没有填充它们,我使用纯db进行操作,没有结果。您是否使用调试器检查了代码以确保它从代码中添加数据?DbContext通常是一个按请求作用域的服务,通常每个请求只调用一次savechanges,因此在添加所有数据后,我只会调用它一次。我仍然没有更改任何内容,只有一个添加到db的内容是迁移历史记录中的一条记录,没有其他内容,有什么想法吗?我用的是msn上的教程,为什么他们的db在工作??填充物呢?我已经删除了db,但没有结果,在clear db和Nothing上创建。我想你应该阅读整个系列,以正确的方式完成它,而不是一步一步地遵循每个教程。在同一系列的本教程中,我看到他们在迁移中正确地使用了同一个项目,但是如果数据库根本不存在,它应该可以工作,它应该创建数据库并进行迁移
public static void Main(string[] args)
{
      //CreateWebHostBuilder(args).Build().Run();
      var host = CreateWebHostBuilder(args).Build();
      using (var scope = host.Services.CreateScope())
      {
            var services = scope.ServiceProvider;
            try
            {
                  var context = services.GetRequiredService<AppDbContext>();
                  //context.Database.EnsureCreated();
                  DbInitializer.Initialize(context);
            }
            catch (Exception ex)
            {
                  var logger = services.GetRequiredService<ILogger<Program>>();
                  logger.LogError(ex, "An error occurred creating the DB.");
            }
      }
      host.Run();
}