#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. Я хотел бы использовать только аннотации данных, если это возможно