Sequence contains more than one matching element в FirstOrDefault
Получаю ошибку Sequence contains more than one matching element в методе FirstOrDefault. Ошибка появляется в проекте с тестами. Версия EF фреймворков одинаковая. Разница только в версии .NET, основной проект .NET 5.0, проект с тестами .NET 6.0, я очень сомниваюсь что проблема в этом. Получаю ошибку в тесте:
Message: System.TypeInitializationException : The type initializer for 'Microsoft.EntityFrameworkCore.Query.QueryableMethods' threw an exception. ---- System.InvalidOperationException : Sequence contains more than one matching element
Stack Trace: QueryableMethods.get_Select() QueryableMethodNormalizingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) MethodCallExpression.Accept(ExpressionVisitor visitor) ExpressionVisitor.Visit(Expression node) QueryTranslationPreprocessor.NormalizeQueryableMethod(Expression expression) QueryTranslationPreprocessor.Process(Expression query) QueryCompilationContext.CreateQueryExecutor[TResult](Expression query) Database.CompileQuery[TResult](Expression query, Boolean async) QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async) <>c__DisplayClass9_0
1.<Execute>b__0() CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func
1 compiler) QueryCompiler.Execute[TResult](Expression query) EntityQueryProvider.Execute[TResult](Expression expression) Queryable.FirstOrDefault[TSource](IQueryable1 source, Expression
1 predicate) MainAPIService.ctor(AppDBContext context, String serverCode, Boolean SSLIgnore) line 24 Service1C8.ctor(AppDBContext context) line 12 Service1C8Tests.CreateRepositoryAsync() line 53 Service1C8Tests.GetGasInfoAsyncNotNULLResult() line 38 <>c.b__128_0(Object state) ----- Inner Stack Trace ----- ThrowHelper.ThrowMoreThanOneMatchException() Enumerable.TryGetSingle[TSource](IEnumerable1 source, Func
2 predicate, Boolean& found) Enumerable.Single[TSource](IEnumerable1 source, Func
2 predicate) QueryableMethods.cctor()
Сам тест:
public class Service1C8Tests
{
private DbContextOptions<AppDBContext> dbContextOptions;
public Service1C8Tests()
{
var dbName = $"AuthorPostsDb_{DateTime.Now.ToFileTimeUtc()}";
dbContextOptions = new DbContextOptionsBuilder<AppDBContext>()
.UseInMemoryDatabase(dbName)
.Options;
}
[Fact]
public async void SaveTimeOnPointAsyncNotNULLResult()
{
//Arrange
Service1C8 service = await CreateRepositoryAsync();
var test = DateTime.Now.ToString("yyyyMMddHHmmss");
//Act
ResponseModel1C result = await service.SaveTimeOnPointAsync("123456", "10", "in");
//Assert
Assert.NotNull(result);
}
[Fact]
public async void GetGasInfoAsyncNotNULLResult()
{
//Arrange
Service1C8 service = await CreateRepositoryAsync();
var test = DateTime.Now.ToString("yyyyMMddHHmmss");
//Act
GasResponseModel1C result = await service.GetGasInfoAsync("123456", GasTypeInfo.History);
//Assert
Assert.NotNull(result);
}
private async Task<Service1C8> CreateRepositoryAsync()
{
AppDBContext context = new AppDBContext(dbContextOptions);
await PopulateDataAsync(context);
return new Service1C8(context);
}
private async Task PopulateDataAsync(AppDBContext context)
{
context.RemoteServers.Add(new RemoteServer
{
Code = "Service1C8",
Host = "some",
Port = "80",
SSL = false,
Login = "testserv",
Password = "1",
Token = "dGVzdHasdas==",
TokenLifeEnd = DateTime.Parse("2023-10-19 13:15:26.2500954"),
AuthorizationHeader = "Basic"
});
await context.SaveChangesAsync();
}
}
Место где она появляеться:
protected MainAPIService(AppDBContext context, string serverCode, bool SSLIgnore = false)
{
_context = context;
_server = _context.RemoteServers
.Include(rs => rs.ServiceProxy)
.FirstOrDefault(s => s.Code == serverCode); //Вот тут выстреливает ексепшен, который я привел выше.
if(_server == null)
{
throw new Exception($"Remote server {serverCode} is NULL! Check DB table!");
}
else
{
WebProxy proxy = null;
if (_server.UseProxy)
{
proxy = new WebProxy()
{
Address = (new UriBuilder(
_server.ServiceProxy.ProxySSL ? "https" : "http",
_server.ServiceProxy.ProxyHost,
_server.ServiceProxy.ProxyPort)).Uri,
UseDefaultCredentials = _server.ServiceProxy.UseDefaultCredentials,
BypassProxyOnLocal = _server.ServiceProxy.BypassProxyOnLocal,
};
if(!_server.ServiceProxy.UseDefaultCredentials)
{
proxy.Credentials = new NetworkCredential(
userName: _server.ServiceProxy.Login,
password: _server.ServiceProxy.Password
);
}
}
_httpHelper = new HTTPHelper(
_server.Host,
_server.Port,
_server.SSL,
SSLIgnore,
proxy
);
TokenAlive = DateTime.Now < _server.TokenLifeEnd;
if(TokenAlive)
{
_httpHelper.SetAuthToken(_server.Token, _server.AuthorizationHeader);
}
}
}
UPD:
EF версия в обоих проектах:5.0.3
AppDbContext:
public class AppDBContext:DbContext
{
public DbSet<RemoteServer> RemoteServers { get; set; }
public AppDBContext(DbContextOptions options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<RemoteServer>().HasData(
new RemoteServer[]
{
new RemoteServer { Id = 1, Code="RemoteIntegrationServer", Host="", Port="", Login="", Password = "", Name="", SSL=false, Token="", AuthorizationHeader="Bearer", UseProxy = false},
new RemoteServer { Id = 2, Code="SignServer", Host="", Port="", Login="", Password = "", Name="", SSL=false, Token="", AuthorizationHeader="Bearer", UseProxy = false},
new RemoteServer { Id = 3, Code="FireBaseProxy", Host="", Port="", Login="", Password = "", Name="", SSL=false, Token="", AuthorizationHeader="Bearer", UseProxy = false},
new RemoteServer { Id = 4, Code="AlarmServer", Host="", Port="", Login="", Password = "", Name="", SSL=false, Token="", AuthorizationHeader="Bearer", UseProxy = false},
new RemoteServer { Id = 5, Code="PortalUZDServer", Host="", Port="", Login="", Password = "", Name="", SSL=true, Token="", AuthorizationHeader="Bearer", UseProxy = false},
new RemoteServer { Id = 6, Code="Service1C8", Host="", Port="", Login="", Password = "", Name="", SSL=false, Token="", AuthorizationHeader="Basic", UseProxy = false},
new RemoteServer { Id = 7, Code="VodafoneService", Host="", Port="", Login="", Password = "", Name="", SSL=true, Token="", AuthorizationHeader="Bearer", UseProxy = false},
}
);
base.OnModelCreating(modelBuilder);
}
}
Global Query Filters нет, Interceptors тоже нет.