При настройке объекта для DbContext в .Net, как мне представить коллекцию объектов с однонаправленным отношением? - PullRequest
1 голос
/ 03 октября 2019

Я делаю конфигурацию объекта для структуры объекта, где объект A содержит коллекцию ICollection, а объект B не имеет никакого отношения к этому объекту. Как мне это настроить?

Вот пример настройки моего объекта

public class A {
    public string id { get; set; }
    public ICollection<B> itemsILike { get; set;}
}

public class B {
    public string id { get; set; }
}

B вообще не нужно знать об A, но я хочу, чтобы у A был списокB что он может добавлять или удалять (и также может быть пустым)

Это то, что у меня есть в настоящее время, но я не думаю, что это создает правильные отношения

public void Configure(EntityTypeBuilder<A> builder)
        {
            builder.HasKey(e => e.id);

            builder.HasMany(e => e.itemsILike);
        }

public void Configure(EntityTypeBuilder<B> builder)
        {
            builder.HasKey(e => e.id);
        }

Любая идея каккак настроить?

1 Ответ

0 голосов
/ 03 октября 2019

Чтобы хранить информацию о том, какие B s принадлежат A, база данных должна где-то хранить эту информацию. Без него невозможно было бы установить, какие B с возвращать при извлечении записи A.

Это может быть либо с помощью внешнего ключа aId на B, либо с помощью отношения «многие ко многим» с промежуточной таблицей / таблицей соединений, которая содержит как минимум aId и bId.


Существует также возможность сохранения коллекции Bs в столбце A и десериализации ее в коде. Например, можно сохранить список идентификаторов, разделенных запятыми, в виде одной строки и добавить свойство / функцию доступа, которые десерализуют данные. Для сложных типов вы можете использовать json.

Обратите внимание, что я не защищаю хранение json, но если вы не можете / не хотите хранить отношения как столбец B, это может быть решением.


Кстати. Для EF Core вы можете посмотреть No Foreign Key Property и Shadow Properties, упомянутые там.

...