Ho una query abbastanza semplice qui:
public async Task<IActionResult> Index(string sortOrder)
{
ApplicationUser user = await _userManager.GetUserAsync(User);
var context = _context.Engine
.Include(e => e.EngineType)
.Where(e => e.Company == user.Company);
return View(await context.ToListAsync());
}
Il problema è che mi dà una NullReferenceException quando tenta di tornare. So che il problema è la dichiarazione Where perché se uso il sotto funziona correttamente.
public async Task<IActionResult> Index(string sortOrder)
{
ApplicationUser user = await _userManager.GetUserAsync(User);
var context = _context.Engine
.Include(e => e.EngineType);
return View(await context.ToListAsync());
}
Ho spostato le cose senza successo. Ho trovato questo problema simile su StackOverflow: EF Core 2.1 Puntelli all'interno di dove causa riferimento null ma ToList () non funziona neanche per me.
Qualcuno sa cosa sta succedendo?
MODIFICARE
L'errore:
NullReferenceException: Object reference not set to an instance of an object.
lambda_method(Closure , Company )
Microsoft.EntityFrameworkCore.Metadata.Internal.ClrPropertyGetter<TEntity, TValue>.GetClrValue(object instance)
Microsoft.EntityFrameworkCore.Storage.Internal.TypeMappedPropertyRelationalParameter.AddDbParameter(DbCommand command, object value)
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBase.AddDbParameter(DbCommand command, IReadOnlyDictionary<string, object> parameterValues)
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.CreateCommand(IRelationalConnection connection, IReadOnlyDictionary<string, object> parameterValues)
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteAsync(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary<string, object> parameterValues, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable<T>+AsyncEnumerator.BufferlessMoveNext(DbContext _, bool buffer, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync<TState, TResult>(TState state, Func<DbContext, TState, CancellationToken, Task<TResult>> operation, Func<DbContext, TState, CancellationToken, Task<ExecutionResult<TResult>>> verifySucceeded, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable<T>+AsyncEnumerator.MoveNext(CancellationToken cancellationToken)
System.Linq.AsyncEnumerable+SelectEnumerableAsyncIterator<TSource, TResult>.MoveNextCore(CancellationToken cancellationToken)
System.Linq.AsyncEnumerable+AsyncIterator<TSource>.MoveNext(CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider+ExceptionInterceptor<T>+EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken)
System.Linq.AsyncEnumerable.Aggregate_<TSource, TAccumulate, TResult>(IAsyncEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> accumulator, Func<TAccumulate, TResult> resultSelector, CancellationToken cancellationToken)
InstantBSI.Controllers.EnginesController.Index(string sortOrder) in EnginesController.cs
return View(await context.ToListAsync());
La mia classe di motore:
public int Id { get; set; }
public int CompanyId { get; set; }
public Company Company { get; set; }
[Display(Name = "Engine Type")]
public int EngineTypeId { get; set; }
public EngineType EngineType { get; set; }
public List<Inspection> Inspections { get; set; }
[Display(Name = "Serial Number")]
public long SerialNumber { get; set; }
[Display(Name = "License Number")]
[DisplayFormat(NullDisplayText = "N/A")]
public long LicenseNumber { get; set; }
[Display(Name = "Total Flight Cycles")]
public int TotalFlightCycles { get; set; }
[Display(Name = "Total Flight Hours")]
public int TotalFlightHours { get; set; }
[Required]
[Display(Name = "Aircraft Maintenence Manual")]
public string AircraftMaintenenceManual { get; set; }
Risulta che la mia tabella del motore aveva CompanyId anziché Company. Tutto quello che dovevo fare era cambiarlo in:
var context = _context.Engine
.Include(e => e.EngineType)
.Where(e => e.CompanyId == user.CompanyId);