gpt4 book ai didi

c# - EF Core、Sqlite、InMemory、Code First - 如何?

转载 作者:行者123 更新时间:2023-12-05 08:49:29 25 4
gpt4 key购买 nike

我想用我的测试模型的结构创建一个数据库。在内存中。使用 Sqlite 和 Entity Framework Core。当然,先写代码。我创建了我的模型。

数据\DataContext.cs:

using Microsoft.EntityFrameworkCore;

namespace MyTest.Data {

public class DataContext : DbContext {

public DbSet<Record> Records { get; set; }

public DataContext(DbContextOptions options) : base(options) { }

}

}

数据\记录.cs:

using System;

namespace MyTest.Data {

public class Record {

public int Id { get; set; }

public string Name { get; set; }

public string Description { get; set; }

public DateTime Time { get; set; }

}
}

我有这个测试代码:

using System;
using System.Data.Common;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;

using MyTest.Data;

namespace MyTest {

public class Startup {

static DbConnection TestDbConnection = new SqliteConnection("Data Source=:memory:;Cache=shared");

void InitializeTestDatabase() {
var dbOptions = new DbContextOptionsBuilder().UseSqlite(TestDbConnection).Options;
var dbContext = new DataContext(dbOptions);
dbContext.Database.EnsureCreated();
for (int i = 0; i < 1024; i++) {
var testString = Guid.NewGuid().ToString();
dbContext.Records.Add(new Record { Name = testString.Substring(0, 8), Description = testString, Time = DateTime.Now });
}
dbContext.SaveChanges();
}

}

}

当然会抛出SQL异常,因为没有像“Records”这样的表。明显地。该结构通常是使用迁移创建的,但我了解到您不能将迁移与 InMemory 一起使用。我应该改用 EnsureCreated()。但是我怎样才能从我的模型代码中获得构建的结构呢?我在这里缺少什么?

最佳答案

我需要在我的连接上添加 SqliteConnection.Open 调用以使其工作:

var conn = new SqliteConnection("DataSource=:memory:");
conn.Open(); // open connection to use

var options = new DbContextOptionsBuilder<VegaDbContext>()
.UseSqlite(conn)
.Options;

using (var ctx = new VegaDbContext(options))
{
ctx.Database.EnsureCreated();
ctx.Records.ToList();
}

关于c# - EF Core、Sqlite、InMemory、Code First - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64012624/

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