Entity Framework Отношение «один к одному» с POCO, генерирующее FK во втором объекте - PullRequest
0 голосов
/ 05 июля 2018

У меня есть следующие отношения POCO;

public class Equipment : Entity
{
    //... removed for brevity
    public virtual List<Qualification> RequiredQualifications { get; set; }
}

    public class Qualification : AuditableEntity
{
    public string Name { get; set; }
    //... removed for brevity
}

Таким образом, это односторонние отношения, когда один и тот же Qualification может быть связан с Equipment.

Entity Framework 6 создает идентификатор оборудования FK в таблице генерирования квалификаций, который затем нарушает тот факт, что одна и та же квалификация может быть связана с несколькими устройствами.

Нужно ли создавать POCO для связи или я могу настроить его (через FluentAPI) для автоматического создания связи между двумя учреждениями?

1 Ответ

0 голосов
/ 05 июля 2018

Если единица оборудования может иметь несколько квалификаций и квалификация может быть связана с несколькими единицами оборудования, необходимо настроить отношение «многие ко многим».

Самый простой способ сделать это - настроить свойства навигации на обоих объектах:

public class Equipment : Entity
{
    //... removed for brevity
    public virtual ICollection<Qualification> RequiredQualifications { get; } = new HashSet<Qualification>();
}

public class Qualification : AuditableEntity
{
    public string Name { get; set; }
    public virtual ICollection<Equipment> RelatedEquipment { get; } = new HashSet<Equipment>();
    //... removed for brevity
}

Или, если вы не хотите, чтобы свойство Навигация из Квалификации в Оборудование использовалось, используйте FluentAPI, чтобы настроить его как отношение «многие ко многим».

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Equipment>().HasMany(e => e.RequiredQualifications).WithMany();

}
...