EF6 - 如何确定 NavigationProperty 的 principal/dependent 面
EF6 - How to determine principal/dependent sides from a NavigationProperty
我正在整合一个使用已编译程序集的进程,查找 DbContext
,并为 context
和各种实体 类 编写代码优先文件。它是 larger project.
的一部分
事情进展顺利,但我 运行 陷入困境,试图发现,对于关联,哪一端是主要的,哪一端是从属的。这只是 0-1..0-1 和 1..1 基数中的一个问题,因为其他的可以根据每一端的重数来确定。
不过,在这两种情况下,很明显 EF6 知道哪个是哪个,因为它们必须在源中声明。例如:
public class FooMap : EntityTypeConfiguration<Foo>
{
public FooMap()
{
HasKey(t => t.Id);
ToTable("Foos");
HasRequired(t => t.BarObj).WithRequiredPrincipal(t => t.FooObj);
}
}
我从 CSpace 或 OSpace EntityType
(按此顺序,取决于哪个不为空)开始,并使其 DeclaredNavigationProperties
属性 循环关联.
我要寻找什么才能找到 principal/dependent 名称?不能使用 GetDependentProperties()
来查看它是否 return 是空的,因为如果 DeclaringType
是主体并且没有任何用户,它都会 return 空定义的外键属性(即 FK 的所有影子属性)。
感谢您的任何见解。
好吧,这是我迄今为止 post 回答过的所有问题中最短的 运行 :-)
经过一闪而过的洞察力和对 dotPeek 的一些挖掘之后,我相信我已经找到了我正在寻找的答案。
从 NavigationProperty
对象开始:
AssociationType associationType = (AssociationType) navigationProperty.RelationshipType;
ReferentialConstraint constraint = associationType.Constraint;
AssociationEndMember principalEnd = (AssociationEndMember) constraint.FromRole;
AssociationEndMember dependentEnd = (AssociationEndMember) constraint.ToRole;
EntityType principalType = principalEnd.GetEntityType();
EntityType dependentType = dependentEnd.GetEntityType();
请注意,这当然可以收紧,但我想我 post 出于教育目的我会把它分开。
我正在整合一个使用已编译程序集的进程,查找 DbContext
,并为 context
和各种实体 类 编写代码优先文件。它是 larger project.
事情进展顺利,但我 运行 陷入困境,试图发现,对于关联,哪一端是主要的,哪一端是从属的。这只是 0-1..0-1 和 1..1 基数中的一个问题,因为其他的可以根据每一端的重数来确定。
不过,在这两种情况下,很明显 EF6 知道哪个是哪个,因为它们必须在源中声明。例如:
public class FooMap : EntityTypeConfiguration<Foo>
{
public FooMap()
{
HasKey(t => t.Id);
ToTable("Foos");
HasRequired(t => t.BarObj).WithRequiredPrincipal(t => t.FooObj);
}
}
我从 CSpace 或 OSpace EntityType
(按此顺序,取决于哪个不为空)开始,并使其 DeclaredNavigationProperties
属性 循环关联.
我要寻找什么才能找到 principal/dependent 名称?不能使用 GetDependentProperties()
来查看它是否 return 是空的,因为如果 DeclaringType
是主体并且没有任何用户,它都会 return 空定义的外键属性(即 FK 的所有影子属性)。
感谢您的任何见解。
好吧,这是我迄今为止 post 回答过的所有问题中最短的 运行 :-)
经过一闪而过的洞察力和对 dotPeek 的一些挖掘之后,我相信我已经找到了我正在寻找的答案。
从 NavigationProperty
对象开始:
AssociationType associationType = (AssociationType) navigationProperty.RelationshipType;
ReferentialConstraint constraint = associationType.Constraint;
AssociationEndMember principalEnd = (AssociationEndMember) constraint.FromRole;
AssociationEndMember dependentEnd = (AssociationEndMember) constraint.ToRole;
EntityType principalType = principalEnd.GetEntityType();
EntityType dependentType = dependentEnd.GetEntityType();
请注意,这当然可以收紧,但我想我 post 出于教育目的我会把它分开。