[英]EF Core - conditional relationship - vertical table splitting
I've to deal with a special relationship, due to an existing database schema. 由于现有的数据库架构,我要处理一种特殊的关系。 The db: - table Cat (id, name) - table Dog (id, name) - view Animals: db: - 表Cat(id,name) - 表Dog(id,name) - 查看动物:
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
Now I need to navigate to a Cat, from my Consult-entity. 现在我需要从我的咨询实体导航到Cat。 I've define four entities: 我已经定义了四个实体:
The relation Consult-Animal is no problem. Consult-Animal的关系没问题。 But I need to get the Cat when AnimalType = 2. 但是当AnimalType = 2时我需要获得Cat。
What I'm trying to do is something like: 我想要做的是:
modelBuilder.Entity<Cat>()
.HasOne(a => a.Animal)
.WithOne(a => a.Cat)
.HasForeignKey<Cat>(k => k.Id)
.HasPrincipalKey<Animal>(pk => pk.OriginalId && pk.AnimalType == 1);
The SQL-join should be something like this: SQL连接应该是这样的:
SELECT Animal.*, Cat.*
FROM Animal LEFT JOIN
Cat ON (Animal.OriginalId = Cat.Id AND Animal.AnimalType = 1)
Any ideas how to achieve this? 任何想法如何实现这一目标?
You can do the join like this 你可以像这样进行连接
from a in context.Animal
join c in context.Cat
on new {a.OriginalId, a.AnimalType} equals {c.Id, 1}
select new {a, c}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.