Мне кажется, что вы хотите создать базу данных с (как минимум) двумя таблицами.Таблица с StackImages
и таблица с StackFiles
.
Вы хотите создать отношение один-ко-многим между StackImages
и StackFiles
: каждый StackImage
имеет ноль или более StackFiles
каждый StackFile
принадлежит ровно одному StackImage
.В базе данных это реализовано с использованием внешнего ключа.
Следовательно, неверно, что StackImage является StackFile .Тем не менее, вы можете сказать, что у StackImage есть несколько StackFiles.
В соответствии с первыми соглашениями кода структуры сущностей ваши классы должны быть похожи на:
class StackImage
{
public Guid Id {get; set;}
...
// every StackImage has zero or more StackFiles (one-to-many):
public virtual ICollection<StackFile> StackFiles {get; set;}
}
class StackFile
{
public Guid Id {get; set;}
...
// every StackFile belongs to exactly one StackImage, using foreign key:
public Guid StackImageId {get; set;}
public virtual StackImage StackImage {get; set;}
}
наконец, DbContext:
class MyDbcontext : DbContext
{
public DbSet<StackImage> StackImages {get; set;}
public DbSet<StackFile> StackFiles {get; set;}
}
Обратите внимание на использование виртуальных свойств для выражения связей между таблицами.Поскольку внешний ключ StackImageId
должен быть реальным столбцом, он не является виртуальным
В структуре сущностей столбцы таблицы представлены не виртуальными свойствами, виртуальные свойства представляют отношениямежду таблицами.
Поскольку я следовал соглашениям, нет необходимости ни в атрибутах, ни в беглости API.Платформа Entity Framework определяет коллекцию «один ко многим» и создает для вас подходящие таблицы.Только если вам нужны разные идентификаторы для ваших таблиц или столбцов, вам потребуется свободный API или атрибуты.