如何将这三个表映射到一个实体中,其中第三个表作为关联
本文关键字:三个 实体 关联 映射 一个 | 更新日期: 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 -一个很好的方向。
谢谢大家!吉姆