简体   繁体   English

EF核心 - 条件关系 - 垂直表分裂

[英]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
  • table Consult (AnimalId, Date) 表咨询(AnimalId,日期)

Now I need to navigate to a Cat, from my Consult-entity. 现在我需要从我的咨询实体导航到Cat。 I've define four entities: 我已经定义了四个实体:

  1. Cat
  2. Dog
  3. Animal 动物
  4. Consult 请教

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM