Отношение EF один к одному

#c# #entity-framework #.net-core

#c# #entity-framework #.net-ядро

Вопрос:

У меня есть база данных, которая выглядит следующим образом:

введите описание изображения здесь

Где TableA является основным, а TableB — зависимым.

Я пытаюсь создать это отношение в БД с помощью Entity Framework. Соединение из TableB в TableA работает, но обратное не работает (TableA в TableB).

 public partial class TableA
{
    [Key]
    public long id { get; set; }
    public virtual TableB tableB { get; set; }
}

public partial class TableB
{
    [Key]
    public long id { get; set; }
    public long TableA_ID { get; set; }
    public string value { get; set; }   
    [ForeignKey("TableA_ID")]   
    public virtual TableA tableA { get; set; }
}
  

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

Поскольку свойства зависимой роли не являются ключевыми свойствами, верхняя граница кратности зависимой роли должна быть ‘*’

или ошибка:

Основной конец этой связи должен быть явно настроен с использованием либо API relationship fluent, либо аннотаций данных

Я пытался добавить [Required] в TableB выше public virtual TableA tableA и в других местах, но, похоже, ничего не работает.

Не могли бы вы помочь мне создать такую связь (используя только аннотации данных, если это возможно)?

Комментарии:

1. Вы определили это отношение в OnModelCreating() переопределении DbContext ?

2. Я не определял это в OnModelCreating. но я понимаю, что могу сделать это с помощью аннотаций данных?

3. Какая версия EF? В EF6 вы можете иметь отношения 1-1 только в том случае, если внешний ключ является ключом сущности.

4. Да, 6. Значит, я не могу сделать это с текущей настройкой БД? Как я могу изменить его, чтобы он работал?

5. Сделайте FK из Table_B в Table_A в PK или просто позвольте ему быть отношением 1 ко многим в EF.

Ответ №1:

 DataSet ds = new DataSet(); 
ds.Tables.Add(TableA);
ds.Relations.Add("TableB", TableA.Columns["id"], TableB.Columns["TableA_ID"]);
ds.Relations["TableB"].Nested = true;
  

Если я правильно понимаю. Вы можете попробовать это.

Комментарии:

1. Я хотел бы использовать только аннотации данных, если это возможно