【发布时间】:2021-02-04 08:00:11
【问题描述】:
我正在研究 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");
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyContext>(opt => opt.UseInMemoryDatabase("myDbName"));
appsettings.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 数据库)?
【问题讨论】:
-
如果您首先使用实体框架代码,您可以创建负责播种数据的新迁移,您可以调用 migrationBuilder.SQL("insert into table");在 up 方法中。然后确保在启动时应用迁移。
-
@DaveMorrison 我没有使用代码优先方法,它是数据库优先
-
别担心,我发布了一个我以前使用过的解决方案......希望它对你有帮助!
-
为什么要从真实数据库中植入内存数据库?内存数据库被视为理想用于单元测试的 Mock,我提供的信息是在启动例程期间播种内存数据库的一种方法,但如果我了解您要实现的目标,我可能能够帮助找到正确的解决方案。
-
@DaveMorrison 这是我最初的问题stackoverflow.com/questions/64451674/…
标签: c# asp.net-core entity-framework-core asp.net-core-3.1 ef-core-3.1