Ваши ссылки нуждаются в некоторой корректировке.Для 1-многих ваш ExplicitMod будет нуждаться в своем собственном PK и FK to Item:
public class ExplicitMod
{
public ExplicitMod()
{}
public ExplicitMod(string name)
{
Name = name;
}
[Key]
public string ExplicitModId { get; set; }
[ForeignKey("Item")]
public string ItemId{ get; set; }
public string Name { get; set; }
public virtual Item Item { get; set; }
}
Я полагаю, что ему также понадобится конструктор без параметров для EF, чтобы иметь возможность создавать их на лету.Возможно, вам удастся избежать использования защищенного или частного конструктора.
Для элемента:
public class Item
{
[Key]
public string ItemId { get; set; }
public virtual ICollection<ExplicitMod> ExplicitMods { get; private set; } = new List<ExplicitMod>();
}
При инициализации коллекции и использовании частного установщика рекомендуется сохранять шаги при создании новых сущностей для заполнения и при наличии внешнего кода, устанавливающего ссылку на коллекцию для новой,неотслеживаемый набор сущностей.(Для модульного тестирования я обычно помечаю сеттер как внутренний, чтобы позволить модульным тестам настроить заглушки)
Я бы настоятельно рекомендовал использовать int
или Guid
для полей PK / FK, а не для строк.Если вы хотите иметь уникальные идентифицирующие строки, добавьте их в качестве дополнительных столбцов / w уникальных ограничений.Использование цифровых или UUID-ключей является формой «бессмысленных ключей», которые экономят пространство индексации и упрощают изменение значений, не беспокоясь о случайном изменении / аннулировании отношений данных.