如何在实体框架中无外键约束地加入

问题描述 投票:0回答:1

我遇到的情况是,拥有几个通用外键会很有意义。也就是说,包含另一个表的 ID 且未定义外键约束的列。

在下面的代码中,

Transfer.FromId
Transfer.ToId
包含另一个表的ID。确切的表格由
Transfer.FromType
Transfer.ToType
列确定。

public enum TransferType
{
    Ship,    // FK to Ships table
    Railcar, // FK to Railcars table
    Truck,   // FK to Trucks table
}

public class Transfer
{
    public TransferType FromType { get; set; }
    public int FromId { get; set; }
    public TransferType ToType { get; set; }
    public int ToId { get; set; }

    public DateTime TimeStamp { get; set; }
    public double Quantity { get; set; }
}

例如,要查找装载到特定卡车上的所有轨道车,我可能会编写与此类似的 SQL。

select t.*
from Transfers t
join Railcars r on t.ToType = 2 and t.ToId = truckId and t.FromType = 1 and r.Id = truckId

但是我如何在实体框架中编写类似的东西呢?看来我需要单独的查询来首先获取 Railcar ID,然后获取实际的 Railcar。有什么我不知道的技术吗?

c# .net entity-framework .net-core entity-framework-core
1个回答
0
投票

这是简单的预加载查询:

var query = 
    from t in ctx.Transfers
    where t.ToId == truckId && t.ToType = TransferType.Truck && t.FromType = TransferType.Railcar
    select new 
    {
        Transfer = t
        Railcars = ctx.Railcars.Where(r => r.Id = truckId).ToList()
    };
© www.soinside.com 2019 - 2024. All rights reserved.