为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
繁星淼淼 2021-10-23 16:32:20
我正在使用 .net core 2 和 entityframework 6.2。我正在尝试使用一些需要的基础数据为数据库做种子。我没有找到 Database.SetInitializer 方法。所以我用谷歌搜索并找到了另一种在类的Main方法中为我的数据库播种的方法Program(如下所示)。我使用下面的代码来播种我的数据库,但是在执行SaveChange方法时DbContext,总是出现 NullReferenceException 错误。我使用的数据库与 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();}
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

好的!我找到了原因。在 Main 方法中,当我创建一个类型为 Province 的新实体时,为其键参数赋值会导致错误。这解决了这个问题:


context.Provinces.Add(new Models.Province

{

     //ID = 1,

     Name = "TEST"

});

但是我真的很生气,因为抛出的异常没有显示真正的错误!


查看完整回答
反对 回复 2021-10-23
  • 2 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信