C# 实体框架、T4模板,以及如何确定属性是否具有折叠的1-1映射表
我使用EF5作为我的ORM工具。我在DB中的3个表之间有如下关系: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;
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%的解决方案,我不确定。如果有任何问题,我会重新考虑