我正在使用 EF DbContext 为我的单元测试创建 SQLite 内存模式,当它创建表时,它会抛出表已存在,即使它们是两个不同的模式,例如 Customer.Order 和 Client.Order
下面的映射文件,我为每个表传递不同的模式名称 - 当我运行迁移到 SQL Server 时它工作正常,但在单元测试时 SQLite 失败
public class CustomerOrderMap: IEntityTypeConfiguration<Order>
{
private readonly string _schemaName;
public CustomerOrderMap(string schema = "")
{
_schemaName = schema;
}
public void Configure(EntityTypeBuilder<Order> builder)
{
builder.ToTable($"Order", _schemaName);
}
}
public void Configure(EntityTypeBuilder<Order> builder)
{
builder.ToTable($"Order", "Client");
}
public void Configure(EntityTypeBuilder<Order> builder)
{
builder.ToTable($"Order", "Customer");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new CustomerOrderMap("Customer"));
modelBuilder.ApplyConfiguration(new ClientOrderMap("Client"));
}
在我的测试课上
_connection = new SqliteConnection("DataSource=:memory:");
_connection.Open();
_contextOptions = new DbContextOptionsBuilder<MyDbContext>()
.UseSqlite(_connection)
.Options;
using var context = new MyDbContext(_contextOptions);
if (context.Database.EnsureCreated())
{
}
错误消息 - SQLite 错误 1:“表“Order”已存在”。
请问有什么想法吗?
我尝试将表名称更改为不同的名称,例如 Order1 和 Order2,效果很好,但我需要在 SQLite 中创建表名称相同但架构不同的表以进行测试
SQLite 不支持模式。您需要将它们映射到 SQLite 上的不同表名:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// ...
if (Database.IsSqlite())
{
modelBuilder.Entity<Customer.Order>().ToTable("Customer_Order");
modelBuilder.Entity<Client.Order>().ToTable("Client_Order");
}
}