public static IDictionary <PropertyInfo, PropertyInfo> GetSelectedProperty(Expression exp) { PropertyPairSelectorVisitor visitor = new PropertyPairSelectorVisitor(); visitor.Visit(exp); return(visitor.Properties); }
private NavigationPropertyConfiguration HasNavigationProperty <TTargetEntity, TPartner>( Expression <Func <TStructuralType, TTargetEntity> > navigationPropertyExpression, EdmMultiplicity multiplicity, Expression <Func <TStructuralType, TTargetEntity, bool> > referentialConstraintExpression = null, Expression <Func <TTargetEntity, TPartner> > partnerExpression = null, Expression <Func <TStructuralType, TTargetEntity, bool> > partnerConstraintExpression = null) where TTargetEntity : class { var navigation = GetOrCreateNavigationProperty(navigationPropertyExpression, multiplicity); if (referentialConstraintExpression != null) { var referentialConstraints = PropertyPairSelectorVisitor.GetSelectedProperty(referentialConstraintExpression); foreach (var constraint in referentialConstraints) { navigation.HasConstraint(constraint); } } if (partnerExpression != null) { var partnerMultiplicity = EdmMultiplicity.One; if (typeof(IEnumerable).IsAssignableFrom(typeof(TPartner))) { partnerMultiplicity = EdmMultiplicity.Many; } navigation.Partner = _configuration.ModelBuilder .EntityType <TTargetEntity>() .GetOrCreateNavigationProperty( partnerExpression, partnerMultiplicity); _configuration .ModelBuilder .EntityType <TTargetEntity>() .RemoveProperty(partnerExpression); // ._configuration // .RemoveProperty(navigation.Partner.PropertyInfo); if (partnerConstraintExpression != null) { var partnerConstraints = PropertyPairSelectorVisitor.GetSelectedProperty(partnerConstraintExpression); foreach (var constraint in partnerConstraints) { navigation.Partner.HasConstraint(constraint); } } } return(navigation); }
public NavigationPropertyConfiguration HasRequired <TTargetEntity>( Expression <Func <TStructuralType, TTargetEntity> > navigationPropertyExpression, Expression <Func <TStructuralType, TTargetEntity, bool> > referentialConstraintExpression) where TTargetEntity : class { NavigationPropertyConfiguration navigation = GetOrCreateNavigationProperty(navigationPropertyExpression, EdmMultiplicity.One); IDictionary <PropertyInfo, PropertyInfo> referentialConstraints = PropertyPairSelectorVisitor.GetSelectedProperty(referentialConstraintExpression); foreach (KeyValuePair <PropertyInfo, PropertyInfo> constraint in referentialConstraints) { navigation.HasConstraint(constraint); } return(navigation); }