Entity Framework 6 Односторонние отношения с использованием кода First

code-first ef-code-first entity-framework entity-framework-6

Вопрос

У меня есть следующий сценарий:

  1. Цветной класс

    public int ID
    {
        get;
        set;
    }
    
    public string Name
    {
        get;
        set;
    }
    
    public string Hex
    {
        get;
        set;
    }
    
  2. Класс виджета

    public int ID
    {
        get;
        set;
    }
    
    public int HeaderBackgroundColorID
    {
        get;
        set;
    }
    
    public Color HeaderBackgroundColor
    {
        get;
        set;
    }
    

Используя Code-First, я пытаюсь создать односторонние отношения между классами Widget to Color с полями HeaderBackgroundColor / HeaderBackgroundColorID .

обычно я бы сделал это в классе конфигурации:

this.HasOptional(r => r.HeaderBackgroundColor )
    .WithMany(m => m.Widgets)
    .HasForeignKey(fk => fk.HeaderBackgroundColorID);

но меня не интересует добавление коллекции Widgets в класс Color. попробовал это:

this.HasOptional(r => r.HeaderBackgroundColor )
    .WithMany()
    .HasForeignKey(fk => fk.HeaderBackgroundColorID);

но это вызывает ошибку проверки.

Каков способ сделать это правильно?

Принятый ответ

Вы получаете сообщение об ошибке , потому что HeaderBackgroundColorId является ненулевым int , поэтому он не может быть необязательным.

Все, что вам нужно сделать, чтобы достичь того, что вы ищете, - это превратить внешний ключ в нулевое значение int ...

public int? HeaderBackgroundColorID { get; set; }

Поскольку вы HeadBackgroundColorId внешний ключ в соответствии с свойством навигации ( HeadBackgroundColorId и HeaderBackgroundColor ), который следует за соглашениями Code First, вам не нужно создавать какие-либо явные сопоставления. Простое внесение вышеуказанного изменения сделает отношения необязательными.




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему