如何将这三个表映射到一个实体中,其中第三个表作为关联

本文关键字:三个 实体 关联 映射 一个 | 更新日期: 2023-09-27 17:50:15

我有一个关于多个表映射到具有不同键名的单个实体的问题。

假设下列表格:

table cs_One
(
    oneID,    -- pk
    colOne1,
    colOne2
)
table two
(
    domainID, -- fk to domain
    colTwo1,
    colTwo2,
)
table domain
(
    domainID, -- pk
    CSoneID,  -- fk to cs_one
    col1,
    col2,
)
public class entAll 
{
    int oneID;
    int domainID;
    int CSoneID;
    colOne1;
    colOne2;
    colTwo1;
    colTwo2;
}

我的映射
public class entAllMap : EntinyTypeConfiguration<entAll>
{
    public entAllMap()
    {
        HasKey(e => new { e.oneID, e.domainID })
        .Map(e =>
            {
                e.Properties(c => new
                {
                    c.oneID,
                    c.ColOne1,
                    c.ColOne2,
                });
                e.ToTable("cs_one");
            })
        .Map(e => 
            {
                e.Properties(c => new
                {
                    c.domainID,
                    c.ColTwo1,
                    c.ColTwo2,
                });
                e.ToTable("two");
            })
        .Map(e =>
            {
                e.Properties(c => new 
                {
                    c.domainID,
                    c.CSoneID,
                });
                e.ToTable("domain");
            });
    }
}

这是我期望和需要的查询(关于连接)

select t1.[oneID], t1.[col1], t1.[col2], t2.[domainID], t2.[col1], t2.[col2]
from [cs_one] t1
join [domain] d1 on t1.[oneID] = t1.[CSoneID]
join [two] t2 on d1.[domainID] = t2.[domainID]

我得到的查询类似如下:

select t1.[oneID], t1.[col1], t1.[col2], t2.[domainID], t2.[col1], t2.[col2]
from [domain] d1
join [two] t2 on d1.[domainID] = t1.[domainID]
join [cs_one] t1 on t2.[domainID] = t1.[domainID]

我如何将这三个表映射到一个实体中,其中第三个表作为各种关联表。我不能更改键名。我不能修改这些表。

我的目标是使用这三个伪表创建一个实体。问题在于,连接其他两个表(cs_one和two)的表(域)具有与目标列不同的外键列名。下面的连接是我发现困难的地方:

join [domain] d1 on t1.[oneID] = t1.[CSoneID]

如果我可以指定fk => pk列名和映射中的关系-这实际上是我正在寻找的。是否有这样的方法/属性/帮助器-我似乎找不到。

请帮助。

谢谢

如何将这三个表映射到一个实体中,其中第三个表作为关联

经过大量研究,我发现-通过MS文档-这是不可能做到的。我已经提交了一个增强请求,允许开发人员显式地定义实体、数据库表和彼此之间的关系。

唉,我已经诉诸于Linq to SQL -一个很好的方向。

谢谢大家!吉姆