Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架、T4模板,以及如何确定属性是否具有折叠的1-1映射表_C#_Entity Framework_Entity Framework 5_T4 - Fatal编程技术网

C# 实体框架、T4模板,以及如何确定属性是否具有折叠的1-1映射表

C# 实体框架、T4模板,以及如何确定属性是否具有折叠的1-1映射表,c#,entity-framework,entity-framework-5,t4,C#,Entity Framework,Entity Framework 5,T4,我使用EF5作为我的ORM工具。我在DB中的3个表之间有如下关系: if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many && navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) bool collapsedTable = false;

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

if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many &&
    navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
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;
}

表1是主表。它与表2有“1到0..1”的关系。表2与表3之间存在“多对一”关系

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

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

我该怎么做

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

if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many &&
    navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
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;
}
我知道中间缺少一个表,但是使用上面的模型,它变成了一个多对0..1关系,这可能隐藏了一个中间表,也可能没有


有什么想法吗?

我设法找到了一个大致的解决办法,具体如下:

if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many &&
    navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
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;
}
bool collapsedTable=false;
字符串relationshipTypeName=navProperty.RelationshipType.Name;
var assocSet=container.BaseEntitySets.OfType()
.Where(es=>es.Name==relationshipTypeName&!es.ElementType.IsForeignKey)
.FirstOrDefault();
if(assocSet!=null)
{
collapsedTable=true;
}
以防有人遇到类似的问题。它似乎解决了我遇到的确切问题…对于100%的情况,这是否是一个100%的解决方案,我不确定。如果有任何问题,我会重新考虑