asp net core数据库初始化(播种数据)

时间:2016-11-15 10:02:56

标签: c# asp.net database initialization

我想用数据初始化数据库,只要这些数据不存在。在这个例子中,每当表格#34; Country"为空,将插入数据。以下是来自" Startup"的代码。类:

$CDrive = Get-Content $PSScriptRoot\SaveMe.txt |  where { $_ -match 'C:\\(?!Windows\\|Program Files\\|Program Files \(x86\)\\).+'}
$EDrive = Get-Content $PSScriptRoot\SaveMe.txt |  where { $_ -match 'E:\\(?!Windows\\|Program Files\\|Program Files \(x86\)\\).+'}
$GDrive = Get-Content $PSScriptRoot\SaveMe.txt |  where { $_ -match 'G:\\(?!Windows\\|Program Files\\|Program Files \(x86\)\\).+'}

指定的行会产生编译警告"由于不等待此调用,因此在调用完成之前会继续执行当前方法"。好的,它是一种同步方法,我正在调用异步方法。解决此问题的最佳方法是什么(两个选项都很好:在继续执行时启动异步处理数据插入,或等待其完成然后继续)。

另外,我想知道使用ApplicationDbContext.OnModelCreating而不是Startup.Configure来描述数据库初始化是否更好。

1 个答案:

答案 0 :(得分:-1)

如果您不需要结果,那么您只需返回void而不是Task.That会为您节省警告

    private static async void AddCountries(ApplicationDbContext db)
    {   
        if (db.Country.Any())
        {
            return;   // DB has been seeded
        }

        db.AddRange(
            new Country { Name = "England", Code = "En" },
            new Country { Name = "France", Code = "Fr" }
            );

       db.SaveChanges();
   }

但是你应该使用await执行实际操作(Task)而不是计算行数。