Работа со свойством IReadOnlyCollection в Entiry Framework Core 2.1 - PullRequest
0 голосов
/ 12 июня 2018

У меня есть следующая сущность домена:

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();

У меня есть следующая конфигурация для позиций:

builder.Property(x => x.LineItems)
       .HasField("_lineItems")
       .UsePropertyAccessMode(PropertyAccessMode.Field);

Однако, когда я запускаю свое приложение, яполучаю следующую ошибку:

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'.

Насколько я понимаю, EF должен использовать поле поддержки только для моей конфигурации?

Я попытался добавить атрибут [NotMapped] только для того, чтобы увидеть, что произошло, но это не сработало.

Неужели я не прав?Любые указатели будут оценены.

1 Ответ

0 голосов
/ 12 июня 2018

Можно настроить использование вспомогательного поля для свойства навигации, но не с помощью метода Property, который предназначен для свойства примитива, и не через свободный API (в настоящее время не существует), но напрямую через метаданные изменяемой модели.связанный со связью:

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); // <--

Вы также можете установить режим для всех свойств навигации объекта (вы можете переопределить его для отдельных свойств), используя:

modelBuilder.Entity<PurchaseOrder>()
    .Metadata.SetNavigationAccessMode(PropertyAccessMode.Field);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...