Ho la seguente entità di dominio:
public string Reference { get; private set; }
public int SupplierId { get; private set; }
public int BranchId { get; private set; }
public Guid CreatedBy { get; private set; }
public DateTime CreatedDate { get; private set; }
public Source Source { get; private set; }
public OrderStatus OrderStatus { get; private set; }
public decimal NetTotal { get; private set; }
public decimal GrossTotal { get; private set; }
private List<PurchaseOrderLineItem> _lineItems = new List<PurchaseOrderLineItem>();
public IReadOnlyCollection<PurchaseOrderLineItem> LineItems => _lineItems.AsReadOnly();
Ho la seguente configurazione per gli elementi pubblicitari:
builder.Property(x => x.LineItems)
.HasField("_lineItems")
.UsePropertyAccessMode(PropertyAccessMode.Field);
Tuttavia, quando eseguo la mia app, ricevo il seguente errore:
The property 'PurchaseOrder.LineItems' is of type 'IReadOnlyCollection<PurchaseOrderLineItem>' which is not supported by current database provider. Either change the property CLR type or ignore the property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.
La mia comprensione è che EF dovrebbe utilizzare solo il campo di supporto per la mia configurazione?
Ho provato ad aggiungere l'attributo [NotMapped] solo per vedere cosa è successo, ma non ha funzionato.
Sono davvero in errore con questo? Qualsiasi suggerimento sarebbe apprezzato.
È possibile configurare un utilizzo del campo di supporto per una proprietà di navigazione, ma non tramite il metodo Property
che è per la proprietà primitiva e non tramite l'API fluente (al momento non esiste), ma direttamente attraverso i metadati del modello mutabile associati alla relazione:
modelBuilder.Entity<PurchaseOrder>()
.HasMany(e => e.LineItems)
.WithOne(e => e.PurchaseOrder) // or `WithOne() in case there is no inverse navigation property
.Metadata.PrincipalToDependent.SetPropertyAccessMode(PropertyAccessMode.Field); // <--
Puoi anche impostare la modalità per tutte le proprietà di navigazione dell'entità (puoi comunque sovrascriverla per le singole proprietà) utilizzando:
modelBuilder.Entity<PurchaseOrder>()
.Metadata.SetNavigationAccessMode(PropertyAccessMode.Field);