npgsql / efcore.pg

Entity Framework Core provider for PostgreSQL
PostgreSQL License
1.54k stars 226 forks source link

Neither "NotMapped" Attribute nor Ignore method is working with DB Entities mapped to SQL view #2828

Closed msaeed027 closed 10 hours ago

msaeed027 commented 1 year ago

Neither "NotMapped" Attribute nor Ignore method is working with Database Entities mapped to view (SQL views)

Env

DB Context

modelBuilder.Entity<OrderItemsCount>()
    .ToView("OrderItemsCounts")
    .Ignore(c => c.Id)
    .HasKey(c => new { c.Id });

Entity

public class OrderItemsCount : Entity<long>
{
    [NotMapped]
    public override long Id
    {
        get { return OrderId; }
        set { }
    }

    [Key]
    public long OrderId { get; set; }
    public int OrderedCount { get; set; }
    public int RecievedCount { get; set; }
}

When querying all columns without selecting specific columns I got the following error

Npgsql.PostgresException (0x80004005): 42703: column c.Id does not exist
   at Npgsql.NpgsqlConnector.<ReadMessage>g__ReadMessageLong|194_0(NpgsqlConnector connector, Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
   at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
   at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken)
   at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken)
   at Npgsql.NpgsqlCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.InitializeReaderAsync(DbContext _, Boolean result, CancellationToken cancellationToken)
   at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.MoveNextAsync()
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)
roji commented 1 year ago

@msaeed027 please submit a minimal, runnable code sample; there's likely something you're not showing in the snippets above which causes this.

Also, note that .NET and EF 5 are now out of support. Please upgrade to 6.0 before producing the repro.

roji commented 10 hours ago

Closing as no repro was provided.