gpt4 book ai didi

.net-core - Entity Framework 核心和 UseInMemoryDatabase

转载 作者:行者123 更新时间:2023-12-02 19:42:34 25 4
gpt4 key购买 nike

我正在尝试使用 Entity Framework Core UseInMemoryDatabase 编写测试,因此我的设置如下所示:

    [SetUp]
public void Setup()
{
this.ContextOptions = new DbContextOptionsBuilder<GeneralContext>()
.UseInMemoryDatabase(databaseName: "DiagAc2Tests")
.Options;
}

我不知道是否需要它,但上下文看起来像:

public class GeneralContext : DbContext
{
public DbSet<Entities.Application> Applications { get; set; }
public GeneralContext() { }
public GeneralContext(DbContextOptions<GeneralContext> options) : base(options) { }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var config = new DatabaseConfiguration();
optionsBuilder.UseNpgsql(config.GetConnectionString());
}
}

我在我的应用程序中使用了这个上下文并且它有效,所以我的测试看起来像:

        public async Task CreateApplicationByService()
{
Mock<DTO.IApplication> mock = new Mock<DTO.IApplication>();
mock.SetupProperty(f => f.Name, "Application");
mock.SetupProperty(f => f.ProjectId, 666);
mock.SetupProperty(f => f.ConfigFilePath, null);

DTO.IApplication appDto = mock.Object;

var entity = this.Mapper.Map<DTO.IApplication, Application>(appDto);
try
{
using var context = new GeneralContext(this.ContextOptions);
await context .ApplicationRepository.Add(entity);
}
catch (Exception ex)
{
var t = ex;
}

var one = 1;
var two = 2;
Assert.True(one != two);
}

我没有任何断言,这就是添加该愚蠢断言的原因,但是当我通过上下文添加记录时,我得到:

Services for database providers 'Microsoft.EntityFrameworkCore.InMemory', 'Npgsql.EntityFrameworkCore.PostgreSQL' have been registered in the service provider. Only a single database provider can be registered in a service provider. If possible, ensure that Entity Framework is managing its service provider by removing the call to UseInternalServiceProvider. Otherwise, consider conditionally registering the database provider, or maintaining one service provider per database provider.

我根据 MSDN 上的文档完成了所有操作,所以有什么地方错了吗?

最佳答案

optionsBuilder.UseNpgsql(config.GetConnectionString());

错误在这一行,这是一个控制反转的例子。你不应该调用 UseNpqSqlOnConfiguring. 内它所做的是尝试使用 2 个数据库。

this.ContextOptions = new DbContextOptionsBuilder<GeneralContext>()
.UseInMemoryDatabase(databaseName: "DiagAc2Tests")
.Options;

optionsBuilder.UseNpgsql(config.GetConnectionString());

以上两个语句都会运行。

现在解决这个问题的方法是将 UseNpgsql 移到配置之外并移到您的应用程序启动类中。这当然取决于您的项目以及您希望如何实现它。

关于.net-core - Entity Framework 核心和 UseInMemoryDatabase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59895144/

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