asp.net-core - 带有JsonDocument无参数构造函数的Net core 3 InMemorydatabase问题
问题描述
我有内存测试(.AddEntityFrameworkInMemoryDatabase())的.Net Core 3测试项目。我的主数据库是 postgres 12 和
[Table("event")]
public class Event
{
[Column("ev_payload", TypeName = "jsonb")]
public string Payload { get; set; }
}
被替换为:
[Table("event")]
public class Event
{
[Column("ev_payload")]
public JsonDocument Payload { get; set; }
}
现在,我运行我的测试。使用 postgres 进行集成测试和端到端测试都很好,但在内存中测试失败并出现异常。
System.InvalidOperationException : No suitable constructor found for entity type 'Event'. The following constructors had parameters that could not be bound to properties of the entity type: cannot bind 'payload' in 'Event(Guid id, DateTime time, string type, JsonDocument payload)'; cannot bind 'payload' in 'Event(Guid id, DateTime time, string type, JsonDocument payload, DateTime insertedDateTimeUtc, DateTime updatedDateTimeUtc)'.
at Microsoft.EntityFrameworkCore.Metadata.Conventions.ConstructorBindingConvention.ProcessModelFinalized(IConventionModelBuilder modelBuilder, IConventionContext`1 context)
at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnModelFinalized(IConventionModelBuilder modelBuilder)
at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.OnModelFinalized(IConventionModelBuilder modelBuilder)
at Microsoft.EntityFrameworkCore.Metadata.Internal.Model.FinalizeModel()
at Microsoft.EntityFrameworkCore.ModelBuilder.FinalizeModel()
at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel()
at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model()
at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.<>c.<TryAddCoreServices>b__7_3(IServiceProvider p)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies()
at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()
at Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>.get_Instance()
at Microsoft.EntityFrameworkCore.Infrastructure.Internal.InfrastructureExtensions.GetService[TService](IInfrastructure`1 accessor)
at Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService[TService](IInfrastructure`1 accessor)
at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.get_Dependencies()
at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureCreated()
at BpsConsoleTest.TestUtils.Factories.InMemoryDbWebApplicationFactory`1.<ConfigureWebHost>b__2_0(IServiceCollection services) in C:\Users\tibor.balaz\source\repos\BpsVisualization\BpsConsole\BpsConsoleTest\TestUtils\Factories\InMemoryDbWebApplicationFactory.cs:line 53
at Microsoft.AspNetCore.Hosting.WebHostBuilder.<>c__DisplayClass10_0.<ConfigureServices>b__0(WebHostBuilderContext _, IServiceCollection services)
at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
at Microsoft.AspNetCore.TestHost.TestServer..ctor(IWebHostBuilder builder, IFeatureCollection featureCollection)
at Microsoft.AspNetCore.TestHost.TestServer..ctor(IWebHostBuilder builder)
at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.CreateServer(IWebHostBuilder builder)
at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.EnsureServer()
at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.CreateDefaultClient(DelegatingHandler[] handlers)
at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.CreateDefaultClient(Uri baseAddress, DelegatingHandler[] handlers)
at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.CreateClient(WebApplicationFactoryClientOptions options)
at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.CreateClient()
at BpsConsoleTest.BpsConsole.Web.Controllers.UpTimeControllerTest.TestGetUpTime(String url) in C:\Users\tibor.balaz\source\repos\BpsVisualization\BpsConsole\BpsConsoleTest\BpsConsole\Web\Controllers\UpTimeControllerTest.cs:line 54
--- End of stack trace from previous location where exception was thrown ---
我认为这是由于 Npgsql.EntityFrameworkCore.PostgreSQL 处理 JsonDocument 和 InMemoryTestDatabase 尝试使用构造函数并绑定 JsonDocument 失败,因为 JsonDocument 具有内部构造函数。
有什么可以做的吗?你有没有遇到过同样的问题,你是怎么解决的?
我会很高兴有任何想法/帮助。
谢谢你。
解决方案
推荐阅读
- javascript - 来自 XHR 长轮询的 HTTP 303 重定向不重定向
- git - Github 代码库:如何检查 repo 是否被归类为活动
- c# - 如何使用约定正确启用 EF 级联删除
- sql - 子查询错误返回超过 1 个值
- java - 有没有办法更改数据元素,所以我的代码基本上会在我使用构造函数启动方法时从头开始?
- java - Selenium 悬停代码适用于 Chrome 而不是 Edge
- c - Linux内核模块:我的变量在线程函数中使用时丢失了它的值
- python - Pandas 数据框应用函数返回新列会导致标量错误?
- azure - 错误:为机器学习服务 Workpsace 部署 Azure ARM 模板时,“确保使用支持 MSI 的客户端创建工作区”
- javascript - 使用 CropperJS 旋转合适的画布