实体框架 6 - 播种数据库抛出 System.NullReferenceException

我正在使用 .net core 2 和 entityframework 6.2。我正在尝试使用一些需要的基础数据为数据库做种子。

  1. 我没有找到 Database.SetInitializer 方法。所以我用谷歌搜索并找到了另一种在类的Main方法中为我的数据库播种的方法Program(如下所示)。

  2. 我使用下面的代码来播种我的数据库,但是在执行SaveChange方法时DbContext,总是出现 NullReferenceException 错误。

  3. 我使用的数据库与 Identity 使用的数据库相同。会影响结果吗?

程序类:

public class Program

{

    public static void Main(string[] args)

    {

        //BuildWebHost(args).Run();


        var host = BuildWebHost(args);


        using (var scope = host.Services.CreateScope())

        {

            var services = scope.ServiceProvider;

            try

            {

                var context = services.GetRequiredService<ApplicationDbContext>();

                context.Provinces.Add(new Models.Province

                {

                    ID = 1,

                    Name = "TEST"

                });

                context.SaveChanges(); // <= ERROR

                //DbInitializer.Initialize(context);

            }

            catch (Exception ex)

            {

                var logger = services.GetRequiredService<ILogger<Program>>();

                logger.LogError(ex, "An error occured while seeding the database.");

            }

        }


        host.Run();

    }


    public static IWebHost BuildWebHost(string[] args) =>

        WebHost.CreateDefaultBuilder(args)

            .UseStartup<Startup>()

            .Build();

}


繁星淼淼
浏览 149回答 2
2回答

繁花不似锦

好的!我找到了原因。在 Main 方法中,当我创建一个类型为 Province 的新实体时,为其键参数赋值会导致错误。这解决了这个问题:context.Provinces.Add(new Models.Province{&nbsp; &nbsp; &nbsp;//ID = 1,&nbsp; &nbsp; &nbsp;Name = "TEST"});但是我真的很生气,因为抛出的异常没有显示真正的错误!
打开App,查看更多内容
随时随地看视频慕课网APP