首页 > 解决方案 > 如何在 Asp.Net Core API 启动时将数据加载到 InMemory 数据库中?

问题描述

我正在研究 Asp.Net Core 3.1 API。我在 SQL Server 数据库中有几张表。

我正在尝试使用 InMemory 数据库,并尝试在应用程序启动时将数据加载到这些表中。

我写了下面的代码。

public partial class MyContext : DbContext
{
public MyContext ()
{
}

public MyContext (DbContextOptions<MyContext > options)
    : base(options)
{

}

public virtual DbSet<TestEntity> TestEntity{ get; set; }
...
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    if (!optionsBuilder.IsConfigured)
    {
        optionsBuilder.UseInMemoryDatabase("name=RuleDB");
    }
}

启动.cs

public void ConfigureServices(IServiceCollection services)
{

    services.AddDbContext<MyContext>(opt => opt.UseInMemoryDatabase("myDbName"));

应用设置.json

"ConnectionStrings": {
  "RuleDB": "Server=tcp:xyz.database.windows.net,1433;Initial Catalog=myDB;Persist Security Info=False;User ID=test;Password=****;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30"
}

当我尝试做时context.TestEntity.ToList();,它没有显示任何记录。

我基本上是在尝试在应用程序启动时将数据从我的 SQL Server 数据库加载到我的 InMemory 数据库中。

我是否遗漏了任何步骤,这不是一个好方法(我的意思是我应该使用 InMemory Cache 代替 InMemory 数据库)?

标签: c#asp.net-coreentity-framework-coreasp.net-core-3.1ef-core-3.1

解决方案


根据您的代码片段,当应用程序启动时,我没有找到您将数据添加到内存数据库的位置。所以,我认为问题是相关的。

尝试将以下文章引用到数据库中的种子数据:

将种子数据应用到数据库

使用 EF Core 的 InMemory 提供程序在内存中存储“数据库”

实体框架核心内存数据库


推荐阅读