Как определить общую сущность и сделать так, чтобы другие энтиты имели отношение один-ко-многим в Entity Framework Core? - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу определить общую сущность, как показано ниже:

class Image
{
    public int ID { get; set; }
    public string  FileName { get; set; }
    public int Length { get; set; }
    public byte[] Data { get; set; }     // image binary data
    ...
}

Потому что у меня есть несколько сущностей, которые будут иметь отношение один-ко-многим к сущности изображения.

class Product
{
    public int ID { get; set; }
    public string  ProductName { get; set; }
    List<Image> ProductAvatars { get; set; }
    ...
}

class Category
{
    public int ID { get; set; }
    public string  CategoryName { get; set; }
    List<Image> CategoryAvatars { get; set; }
    ...
}

Я думаю, что сущность Image не принадлежит одной конкретной сущности (например, Product или Category), поэтому определять внешние ключи в Image не имеет смысла. Должен ли я добавить больше таблиц связей, как показано ниже?

class ProductAvatars
{
    public int ProductID { get; set; }
    public int ImageID { get; set; }   // it's a foreign key of Image entity
}

class CategoryAvatars
{
    public int CategoryID { get; set; }
    public int ImageID { get; set; }    // it's a foreign key of Image entity
}

Как этого добиться? Пожалуйста, дайте мне несколько советов, спасибо всем!

1 Ответ

0 голосов
/ 08 ноября 2018

ВАРИАНТ 1

Вы можете использовать типы соединения:

public class ProductImage {
    public Product Product { get; set; }
    public Image Image {get; set; }
}

public class CategoryImage {
    public Category Category { get; set; }
    public Image Image {get; set;
}

Product и Category не будут иметь List<Image>, но List<ProductImage> и List<CategoryImage>.


ВАРИАНТ 2

Используйте два обнуляемых столбца FK, например:

class Image
{

            public int ID { get; set; }
            public int? ProductId {get; set; } // by making the Id nullable, the FK is optional
            public Product Product { get; set;}
            public int? CategoryId { get; set;}
            public Category Category { get; set;}
            public string FileName { get; set; }
            public int Length { get; set; }
            public byte[] Data { get; set; }     // image binary data

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...