private NavigationPropertyConfiguration AddNavigationProperty(PropertyInfo navigationProperty, EdmMultiplicity multiplicity, bool containsTarget) { if (navigationProperty == null) { throw Error.ArgumentNull("navigationProperty"); } if (!navigationProperty.ReflectedType.IsAssignableFrom(ClrType)) { throw Error.Argument("navigationProperty", SRResources.PropertyDoesNotBelongToType, navigationProperty.Name, ClrType.FullName); } if (navigationProperty.PropertyType == typeof(IEnumerable <DateTime>) || navigationProperty.PropertyType == typeof(IEnumerable <DateTime?>) || navigationProperty.PropertyType == typeof(DateTime) || navigationProperty.PropertyType == typeof(DateTime?)) { throw Error.Argument("navigationProperty", SRResources.DateTimeTypePropertyNotSupported, navigationProperty.PropertyType.FullName, navigationProperty.Name, navigationProperty.DeclaringType.FullName, typeof(DateTimeOffset).FullName, typeof(ODataModelBuilder).FullName); } ValidatePropertyNotAlreadyDefinedInBaseTypes(navigationProperty); ValidatePropertyNotAlreadyDefinedInDerivedTypes(navigationProperty); PropertyConfiguration propertyConfig; NavigationPropertyConfiguration navigationPropertyConfig; if (ExplicitProperties.ContainsKey(navigationProperty)) { propertyConfig = ExplicitProperties[navigationProperty]; if (propertyConfig.Kind != PropertyKind.Navigation) { throw Error.Argument("navigationProperty", SRResources.MustBeNavigationProperty, navigationProperty.Name, ClrType.FullName); } navigationPropertyConfig = propertyConfig as NavigationPropertyConfiguration; if (navigationPropertyConfig.Multiplicity != multiplicity) { throw Error.Argument("navigationProperty", SRResources.MustHaveMatchingMultiplicity, navigationProperty.Name, multiplicity); } } else { navigationPropertyConfig = new NavigationPropertyConfiguration( navigationProperty, multiplicity, this); if (containsTarget) { navigationPropertyConfig = navigationPropertyConfig.Contained(); } ExplicitProperties[navigationProperty] = navigationPropertyConfig; // make sure the related type is configured ModelBuilder.AddEntityType(navigationPropertyConfig.RelatedClrType); } return(navigationPropertyConfig); }
public void NonContained_ModifiesContainsTargetToFalse() { // Arrange NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration( new MockPropertyInfo(), EdmMultiplicity.ZeroOrOne, new EntityTypeConfiguration()); // Act navigationProperty.Contained().NonContained(); // Assert Assert.False(navigationProperty.ContainsTarget); }
public void NonContained_ModifiesContainsTargetToFalse() { // Arrange NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration( new MockPropertyInfo(), EdmMultiplicity.ZeroOrOne, new EntityTypeConfiguration()); // Act navigationProperty.Contained().NonContained(); // Assert Assert.False(navigationProperty.ContainsTarget); }
private NavigationPropertyConfiguration AddNavigationProperty(PropertyInfo navigationProperty, EdmMultiplicity multiplicity, bool containsTarget) { if (navigationProperty == null) { throw Error.ArgumentNull("navigationProperty"); } if (!navigationProperty.ReflectedType.IsAssignableFrom(ClrType)) { throw Error.Argument("navigationProperty", SRResources.PropertyDoesNotBelongToType, navigationProperty.Name, ClrType.FullName); } ValidatePropertyNotAlreadyDefinedInBaseTypes(navigationProperty); ValidatePropertyNotAlreadyDefinedInDerivedTypes(navigationProperty); PropertyConfiguration propertyConfig; NavigationPropertyConfiguration navigationPropertyConfig; if (ExplicitProperties.ContainsKey(navigationProperty)) { propertyConfig = ExplicitProperties[navigationProperty]; if (propertyConfig.Kind != PropertyKind.Navigation) { throw Error.Argument("navigationProperty", SRResources.MustBeNavigationProperty, navigationProperty.Name, ClrType.FullName); } navigationPropertyConfig = propertyConfig as NavigationPropertyConfiguration; if (navigationPropertyConfig.Multiplicity != multiplicity) { throw Error.Argument("navigationProperty", SRResources.MustHaveMatchingMultiplicity, navigationProperty.Name, multiplicity); } } else { navigationPropertyConfig = new NavigationPropertyConfiguration( navigationProperty, multiplicity, this); if (containsTarget) { navigationPropertyConfig = navigationPropertyConfig.Contained(); } ExplicitProperties[navigationProperty] = navigationPropertyConfig; // make sure the related type is configured ModelBuilder.AddEntityType(navigationPropertyConfig.RelatedClrType); } return navigationPropertyConfig; }