Har*_*rry 2 c# sqlite entity-framework-core
我想创建一个具有测试模型结构的数据库。在记忆中。使用 Sqlite 和 Entity Framework Core。当然,先写代码。我创建了我的模型。
Data\DataContext.cs:
using Microsoft.EntityFrameworkCore;
namespace MyTest.Data {
public class DataContext : DbContext {
public DbSet<Record> Records { get; set; }
public DataContext(DbContextOptions options) : base(options) { }
}
}
Run Code Online (Sandbox Code Playgroud)
Data\Record.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; }
}
}
Run Code Online (Sandbox Code Playgroud)
我有这个测试代码:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当然它会抛出SQL异常,因为没有像“Records”这样的表。明显地。该结构通常是通过迁移创建的,但我读到您不能将迁移与InMemory. 我应该用它EnsureCreated()来代替。但是我怎样才能从我的模型代码构建结构呢?我在这里缺少什么?
Gur*_*ron 12
我需要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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3748 次 |
| 最近记录: |