实体框架,T4模板以及如何查找属性是否有1-1映射表崩溃

时间:2013-09-19 16:32:26

标签: c# entity-framework entity-framework-5 t4

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

DB Model

表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的关系,这可能会也可能不会隐藏中间表。

有什么想法吗?

1 个答案:

答案 0 :(得分: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%解决方案,我不确定。有任何问题,我将重新审视。