0

我使用 EF5 作为我的 ORM 工具。我在数据库中的 3 个表之间有如下关系:

数据库模型

表 1 为主表。它与表 2 具有“1 到 0..1”的关系。表 2 与表 3 具有“多对 1”的关系。

现在,当您将其导入 EF 时,它会折叠(隐藏)表 2。您可以通过执行以下操作进入表 3:

Table1.Table3

基本上在我生成代码的T4模板中,我需要知道表1和表3之间的关系是否隐藏了一个中间表。

我怎样才能做到这一点?

多对多表链接很容易,因为我可以查看导航属性关系的多重性,如下所示:

if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many &&
    navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)

而且我会知道中间缺少一个表,但是对于上面的模型,它变成了多对 0..1 的关系,它可能隐藏也可能不隐藏中间表。

有任何想法吗?

4

1 回答 1

0

我设法为此找到了一个粗略的解决方法,如下所示:

bool collapsedTable = false;

string relationshipTypeName = navProperty.RelationshipType.Name;
var assocSet = container.BaseEntitySets.OfType<AssociationSet>()
                                       .Where(es => es.Name == relationshipTypeName && !es.ElementType.IsForeignKey)
                                       .FirstOrDefault();

if (assocSet != null)
{
    collapsedTable = true;
}

万一有人遇到类似的问题。它似乎解决了我遇到的确切问题......我不确定这是否是 100% 案例的 100% 解决方案。有任何问题,我会重新考虑。

于 2013-09-20T13:24:57.673 回答