Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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);
        }