gpt4 book ai didi

entity-framework - 为什么在我使用 Entity Framework 核心创建内存中的 sqlite 数据库时表不存在?

转载 作者:行者123 更新时间:2023-12-04 11:59:14 24 4
gpt4 key购买 nike

我想创建一个内存中的 SQLite 数据库。

这是startup.cs :

 public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<TestDBContext>().AddEntityFrameworkSqlite();
}

这是数据库的模型:
 public class TestModel
{
public string UserName { get; set; }
[Key]
public string id { get; set; }
}

这是数据库的DBContext:
 public class TestDBContext : DbContext
{
public virtual DbSet<TestModel> Test { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=:memory:");
}
}

这是 Controller :
private readonly TestDBContext TestDBContext;

public HomeController(ILogger<HomeController> logger,TestDBContext _TestDBContext)
{
_logger = logger;
this.TestDBContext = _TestDBContext;
}

public IActionResult Index()
{
TestDBContext.Database.EnsureCreated();
TestDBContext.SaveChanges();
TestDBContext.Test.Add(new TestModel() { User = DateTime.Now.ToString(),id=Guid.NewGuid().ToString() });
TestDBContext.SaveChanges();
return View(TestDBContext.Test.ToList());
}

每次运行都会报错:
Inner Exception 1:
SqliteException: SQLite Error 1: 'no such table: Test'.

我用过 EnsureCreatedEnsureCreated运行没有任何错误。为什么还是这个样子?

最佳答案

EF Core 的 DbContext 始终自动打开和关闭与数据库的连接,除非您传递一个已经打开的连接。当连接关闭时,Sqlite 内存数据库将被删除。所以我像这样修改了你的代码。

public void ConfigureServices(IServiceCollection services)
{
var connection = new SqliteConnection("datasource=:memory:");
connection.Open();

services.AddControllersWithViews();
services.AddDbContext<TestDBContext>(options =>
{
options.UseSqlite(connection);
});
}

和数据库上下文类 - 我添加了构造函数,以便我可以提供参数。
public class TestDBContext : DbContext
{
public TestDBContext(DbContextOptions options) : base(options)
{
}

protected TestDBContext()
{
}

public virtual DbSet<TestModel> Test { get; set; }
}

而不是在 Index action 方法中创建数据库,而是在启动时创建它。

关于entity-framework - 为什么在我使用 Entity Framework 核心创建内存中的 sqlite 数据库时表不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59987768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com