Мне приходится иметь дело с особыми отношениями из-за существующей схемы базы данных.
БД:
- таблица 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)
Теперь мне нужно перейти к Кошке от моего консультанта.
Я определил четыре объекта:
- Cat
- Собака
- Animal
- Консалт
В отношении 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)
Есть идеи, как этого добиться?