EF Core множественная реализация одного столбца - PullRequest
2 голосов
/ 30 апреля 2020

Я использую EF Core 3.1, и у меня есть пять моделей: Plant, Area, Unit, Schema и EntitiesSchema. В EnititiesSchema EntityId может быть внешним ключом таблиц Plant (PlantId), Area (AreaId), Unit (UnitId). Как справиться с этим необязательным отношением между этими таблицами?

Спасибо

public class EntitiesSchema
{
    public int Id { get; set; }
    public int EntityId { get; set; }
    public int TopicId { get; set; }
    public int SchemaId { get; set; }
    public string Description { get; set; }
    public Schema Schema { get; set; }
    public ICollection<Topic> Topic { get; set; }
}

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020

Нет, вы не можете связать внешний ключ с несколькими таблицами. Но вы можете поместить другое свойство с именем EntityType для хранения типа сущности. Тогда на стороне клиента вы можете справиться с этим. EntityType может иметь тип enum.

Другой подход заключается в сохранении EntitesSchemaId в моделях Plant, Area, Unit, et c и привязке их к * 1008. *.

0 голосов
/ 30 апреля 2020

Вы можете создать промежуточную сущность для сопоставления с различными типами сущностей. :

Public class EntityMap
{
    public int Id {get;set;}
    public string EntityKind {get;set;} // could be "Plant", "Area", "Unit", "Schema"
}

public class Plant 
{
    public int Id {get;set;}
    public string EntityKind {get;set;} = "Plant";
}

public class EntitySchema
{
     public int Id {get;set;}
     public int EntityMapId {get;set;}
     public EntityMap Map {get;set;}
}

Логика c для чтения данных из отдельной схемы должна быть реализована в клиенте, но общие свойства сущностей могут быть добавлены в EntityMap. Вот аналогичный ответ, на который вы можете сослаться: { ссылка }

...