У меня есть два класса, каждый из которых имеет один первичный ключ (также проверяется в БД - есть только один ключ, а только один столбец - ПК).Почему требуется использовать аннотацию данных столбца, когда нет составных клавиш?
public class Sub1
{
[Key]public int Id {get; set;}
[Required]public int Value {get; set;}
}
public class Sub2
{
[Key]public int Id {get; set;}
[Required]public int Value {get; set;}
}
Затем я добавляю третий класс, который использует столбцы Id в двух вышеуказанных как внешние ключи.
public class Sup
{
[Key]public int Id { get; set; }
[ForeignKey(Sub1)]public int Sub1Id { get; set; }
[ForeignKey(Sub2)]public int Sub2Id { get; set; }
public virtual Sub1 { get; set; }
public virtual Sub2 { get; set; }
}
Когда я пытаюсь запустить Add-Migration, я получаю ошибку ниже. Нет составных первичных ключей, и у меня нет нескольких первичных ключей в любом месте. Когда я добавляю атрибут Column, он работает, но я чувствую, что это не обязательно (следовательно, я подозреваю, что я делаю что-то не так).
Невозможно определить составной внешний ключ для внешнего ключа по типу Beep.Bapp.Thing. При использовании аннотации данных ForeignKey на составных внешних ключах ключ гарантирует, что порядок задается с помощью аннотации данных столбца или свободного API.
В this answer, есть класс Категория и здесь я Хтат нам нужно добавить столбцы приказывая информацию.
public class Category
{
[Key, Column(Order = 0)]
public int CategoryId2 { get; set; }
[Key, Column(Order = 1)]
public int CategoryId3 { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
[Key]
public int ProductId { get; set; }
public string Name { get; set; }
[ForeignKey("Category"), Column(Order = 0)]
public int CategoryId2 { get; set; }
[ForeignKey("Category"), Column(Order = 1)]
public int CategoryId3 { get; set; }
public virtual Category Category { get; set; }
}
Вы не говорите EF, что это иностранные ключи. Как он узнает, что при миграции в обновлении –
Поле Sub1 является внешним ключом, поскольку имеет тип Sub1. И поле Sub1Id содержит это значение внешнего ключа из-за ** соглашения синтаксиса EF **: Sub1Id = "Sub1" + "ID". –
А, так он работает с ID и Id? Я думал, что это было только одно, если они и, никогда не помня, что есть, я всегда использую это явно. Но вы говорите, что обе альтернативы будут создавать изменения в моей * Up() *? Хорошо знать. –