EF Core - условные отношения - вертикальное разбиение таблицы - PullRequest
0 голосов
/ 18 апреля 2019

Мне приходится иметь дело с особыми отношениями из-за существующей схемы базы данных. БД: - таблица Cat (идентификатор, имя) - настольная собака (идентификатор, имя) - посмотреть Животные:

SELECT 'C' + CAST(Id AS VARCHAR) AS AnimalId, Id AS OriginalId, Name, 1 AS AnimalType 
FROM Cat
UNION
SELECT 'D' + CAST(Id AS VARCHAR) AS AnimalId, Id AS OriginalId, Name, 2 AS AnimalType 
FROM Dog
  • таблица Consult (AnimalId, Date)

Теперь мне нужно перейти к Кошке от моего консультанта. Я определил четыре объекта:

  1. Cat
  2. Собака
  3. Animal
  4. Консалт

В отношении Consult-Animal нет проблем. Но мне нужно получить Cat, когда AnimalType = 2.

Я пытаюсь сделать что-то вроде:

modelBuilder.Entity<Cat>()
    .HasOne(a => a.Animal)
    .WithOne(a => a.Cat)
    .HasForeignKey<Cat>(k => k.Id)
    .HasPrincipalKey<Animal>(pk => pk.OriginalId && pk.AnimalType == 1);

SQL-соединение должно быть примерно таким:

SELECT Animal.*, Cat.*
FROM Animal LEFT JOIN 
    Cat ON (Animal.OriginalId = Cat.Id AND Animal.AnimalType = 1)

Есть идеи, как этого добиться?

1 Ответ

0 голосов
/ 18 апреля 2019

Вы можете сделать это как

from a in context.Animal
join c in context.Cat
on new {a.OriginalId, a.AnimalType} equals {c.Id, 1}
select new {a, c}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...