private InternalEntityBuilder EntityTypeAdded(InternalEntityBuilder builder) { if (_conventions != null) { builder = _conventions.OnEntityTypeAdded(builder); } return(builder); }
public void Key_throws_for_property_names_for_shadow_entity_type_if_they_do_not_exist() { var entityType = new Model().AddEntityType(typeof(Order).Name); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); Assert.Equal(Strings.PropertyNotFound(Order.IdProperty.Name, typeof(Order).Name), Assert.Throws <ModelItemNotFoundException>(() => entityBuilder.Key(new[] { Order.IdProperty.Name }, ConfigurationSource.Convention)).Message); }
public void Key_returns_null_for_ignored_property_names() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); entityBuilder.Ignore(Order.CustomerIdProperty.Name, ConfigurationSource.DataAnnotation); Assert.Null(entityBuilder.Key(new[] { Order.IdProperty.Name, Order.CustomerIdProperty.Name }, ConfigurationSource.Convention)); }
public void Key_throws_for_property_names_if_they_do_not_exist() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); Assert.Equal(Strings.NoClrProperty(Customer.UniqueProperty.Name, typeof(Order).FullName), Assert.Throws <InvalidOperationException>(() => entityBuilder.Key(new[] { Customer.UniqueProperty.Name }, ConfigurationSource.Convention)).Message); }
public void Index_returns_null_for_ignored_clr_properties() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); entityBuilder.Ignore(Order.CustomerIdProperty.Name, ConfigurationSource.Explicit); Assert.Null(entityBuilder.Index(new[] { Order.IdProperty, Order.CustomerIdProperty }, ConfigurationSource.DataAnnotation)); }
public void Property_returns_same_instance_for_property_names() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); var propertyBuilder = entityBuilder.Property(typeof(Order), Order.IdProperty.Name, ConfigurationSource.DataAnnotation); Assert.NotNull(propertyBuilder); Assert.Same(propertyBuilder, entityBuilder.Property(Order.IdProperty, ConfigurationSource.DataAnnotation)); }
public void Index_returns_same_instance_for_clr_properties() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); var indexBuilder = entityBuilder.Index(new[] { Order.IdProperty, Order.CustomerIdProperty }, ConfigurationSource.Explicit); Assert.NotNull(indexBuilder); Assert.Same(indexBuilder, entityBuilder.Index(new[] { Order.IdProperty.Name, Order.CustomerIdProperty.Name }, ConfigurationSource.DataAnnotation)); }
public void Key_returns_same_instance_for_property_names() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); var keyBuilder = entityBuilder.Key(new[] { Order.IdProperty.Name, Order.CustomerIdProperty.Name }, ConfigurationSource.Convention); Assert.NotNull(keyBuilder); Assert.Same(keyBuilder, entityBuilder.Key(new[] { Order.IdProperty, Order.CustomerIdProperty }, ConfigurationSource.DataAnnotation)); }
public void Key_works_for_property_names_for_shadow_entity_type() { var entityType = new Model().AddEntityType(typeof(Order).Name); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); entityBuilder.Property(Order.CustomerIdProperty.PropertyType, Order.CustomerIdProperty.Name, ConfigurationSource.Convention); Assert.NotNull(entityBuilder.Key(new[] { Order.CustomerIdProperty.Name }, ConfigurationSource.Convention)); Assert.Equal(Order.CustomerIdProperty.Name, entityType.GetPrimaryKey().Properties.Single().Name); }
private InternalEntityBuilder EntityTypeAdded(EntityType entityType, bool isNew) { var builder = new InternalEntityBuilder(entityType, ModelBuilder); if (isNew && _modelChangeListener != null) { _modelChangeListener.OnEntityTypeAdded(builder); } return(builder); }
public void Cannot_ignore_property_that_is_part_of_same_or_higher_source_key() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); Assert.NotNull(entityBuilder.Key(new[] { Order.IdProperty, Order.CustomerIdProperty }, ConfigurationSource.Explicit)); Assert.False(entityBuilder.Ignore(Order.CustomerIdProperty.Name, ConfigurationSource.DataAnnotation)); Assert.NotEmpty(entityBuilder.Metadata.Properties.Where(p => p.Name == Order.CustomerIdProperty.Name)); Assert.NotEmpty(entityBuilder.Metadata.Keys); }
public void Cannot_ignore_same_or_higher_source_property() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); Assert.True(entityBuilder.Ignore(Order.IdProperty.Name, ConfigurationSource.Convention)); Assert.NotNull(entityBuilder.Property(typeof(Order), Order.IdProperty.Name, ConfigurationSource.Convention)); Assert.NotNull(entityBuilder.Property(typeof(Order), Order.IdProperty.Name, ConfigurationSource.DataAnnotation)); Assert.False(entityBuilder.Ignore(Order.IdProperty.Name, ConfigurationSource.Convention)); Assert.False(entityBuilder.Ignore(Order.IdProperty.Name, ConfigurationSource.DataAnnotation)); Assert.NotNull(entityType.TryGetProperty(Order.IdProperty.Name)); }
public void Can_ignore_same_or_lower_source_property() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); Assert.True(entityBuilder.Ignore(Order.IdProperty.Name, ConfigurationSource.Explicit)); Assert.Null(entityType.TryGetProperty(Order.IdProperty.Name)); Assert.True(entityBuilder.Ignore(Order.IdProperty.Name, ConfigurationSource.Explicit)); Assert.Null(entityBuilder.Property(typeof(Order), Order.IdProperty.Name, ConfigurationSource.DataAnnotation)); Assert.Equal(Strings.PropertyIgnoredExplicitly(Order.IdProperty.Name, typeof(Order).FullName), Assert.Throws <InvalidOperationException>(() => Assert.NotNull(entityBuilder.Property(typeof(Order), Order.IdProperty.Name, ConfigurationSource.Explicit))).Message); }
public void Can_only_override_existing_key_explicitly_using_property_names() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); entityType.SetPrimaryKey(new[] { entityType.GetOrAddProperty(Order.IdProperty), entityType.GetOrAddProperty(Order.CustomerIdProperty) }); Assert.Null(entityBuilder.Key(new[] { Order.IdProperty.Name }, ConfigurationSource.DataAnnotation)); Assert.Equal(new[] { Order.IdProperty.Name, Order.CustomerIdProperty.Name }, entityType.GetPrimaryKey().Properties.Select(p => p.Name).ToArray()); Assert.NotNull(entityBuilder.Key(new[] { Order.IdProperty.Name }, ConfigurationSource.Explicit)); Assert.Equal(Order.IdProperty.Name, entityType.GetPrimaryKey().Properties.Single().Name); }
public void Cannot_ignore_existing_property() { var entityType = new Model().AddEntityType(typeof(Order)); var property = entityType.AddProperty(Order.IdProperty.Name, typeof(int)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); Assert.Same(property, entityBuilder.Property(typeof(Order), Order.IdProperty.Name, ConfigurationSource.Convention).Metadata); Assert.False(entityBuilder.Ignore(Order.IdProperty.Name, ConfigurationSource.DataAnnotation)); Assert.Same(property, entityBuilder.Property(typeof(Order), Order.IdProperty.Name, ConfigurationSource.Convention).Metadata); Assert.False(entityBuilder.Ignore(Order.IdProperty.Name, ConfigurationSource.DataAnnotation)); Assert.NotNull(entityType.TryGetProperty(Order.IdProperty.Name)); Assert.Equal(Strings.PropertyAddedExplicitly(Order.IdProperty.Name, typeof(Order).FullName), Assert.Throws <InvalidOperationException>(() => entityBuilder.Ignore(Order.IdProperty.Name, ConfigurationSource.Explicit)).Message); }
public void Can_only_override_lower_source_key_using_property_names() { var entityType = new Model().AddEntityType(typeof(Order)); var entityBuilder = new InternalEntityBuilder(entityType, new InternalModelBuilder(new Model(), null)); var originalKeyBuilder = entityBuilder.Key(new[] { Order.IdProperty.Name, Order.CustomerIdProperty.Name }, ConfigurationSource.Convention); var newKeyBuilder = entityBuilder.Key(new[] { Order.IdProperty.Name }, ConfigurationSource.DataAnnotation); Assert.NotNull(newKeyBuilder); Assert.NotEqual(originalKeyBuilder, newKeyBuilder); Assert.Equal(Order.IdProperty.Name, entityType.GetPrimaryKey().Properties.Single().Name); var originalKeyBuilder2 = entityBuilder.Key(new[] { Order.IdProperty.Name, Order.CustomerIdProperty.Name }, ConfigurationSource.Explicit); Assert.NotNull(originalKeyBuilder2); Assert.NotEqual(originalKeyBuilder, originalKeyBuilder2); Assert.Null(entityBuilder.Key(new[] { Order.IdProperty.Name }, ConfigurationSource.DataAnnotation)); Assert.Equal(new[] { Order.IdProperty.Name, Order.CustomerIdProperty.Name }, entityType.GetPrimaryKey().Properties.Select(p => p.Name).ToArray()); }
public virtual InternalRelationshipBuilder Relationship( [NotNull] InternalEntityBuilder principalEntityTypeBuilder, [NotNull] InternalEntityBuilder dependentEntityTypeBuilder, [CanBeNull] string navigationToPrincipalName, [CanBeNull] string navigationToDependentName, ConfigurationSource configurationSource, bool?oneToOne = null, bool strictPrincipal = true) { Check.NotNull(principalEntityTypeBuilder, "principalEntityTypeBuilder"); Check.NotNull(dependentEntityTypeBuilder, "dependentEntityTypeBuilder"); if (dependentEntityTypeBuilder != this) { return(dependentEntityTypeBuilder.Relationship( principalEntityTypeBuilder, dependentEntityTypeBuilder, navigationToPrincipalName, navigationToDependentName, configurationSource, oneToOne, strictPrincipal)); } if (!string.IsNullOrEmpty(navigationToPrincipalName) && !dependentEntityTypeBuilder.CanAdd(navigationToPrincipalName, isNavigation: true, configurationSource: configurationSource)) { return(null); } if (!string.IsNullOrEmpty(navigationToDependentName) && !principalEntityTypeBuilder.CanAdd(navigationToDependentName, isNavigation: true, configurationSource: configurationSource)) { return(null); } var principalEntityType = principalEntityTypeBuilder.Metadata; var dependentEntityType = dependentEntityTypeBuilder.Metadata; if (principalEntityType.TryGetPrimaryKey() == null) { if (configurationSource == ConfigurationSource.Explicit) { throw new InvalidOperationException(Strings.PrincipalEntityTypeRequiresKey(principalEntityType.Name)); } return(null); } var navigationToPrincipal = string.IsNullOrEmpty(navigationToPrincipalName) ? null : dependentEntityType.TryGetNavigation(navigationToPrincipalName); if (navigationToPrincipal != null && navigationToPrincipal.IsCompatible(principalEntityType, dependentEntityType, strictPrincipal ? (bool?)true : null, oneToOne)) { return(Relationship(navigationToPrincipal, configurationSource, navigationToDependentName)); } var navigationToDependent = string.IsNullOrEmpty(navigationToDependentName) ? null : principalEntityType.TryGetNavigation(navigationToDependentName); if (navigationToDependent != null && navigationToDependent.IsCompatible(principalEntityType, dependentEntityType, strictPrincipal? (bool?)false : null, oneToOne)) { return(Relationship(navigationToDependent, configurationSource, navigationToPrincipalName)); } if (!RemoveRelationships(configurationSource, navigationToPrincipal?.ForeignKey, navigationToDependent?.ForeignKey)) { return(null); } navigationToPrincipalName = navigationToPrincipalName == "" ? null : navigationToPrincipalName; navigationToDependentName = navigationToDependentName == "" ? null : navigationToDependentName; var foreignKey = new ForeignKeyConvention() .CreateForeignKeyByConvention( principalEntityType, dependentEntityType, navigationToPrincipalName, null, null, oneToOne); if (foreignKey == null) { return(null); } var relationshipBuilder = new InternalRelationshipBuilder(foreignKey, dependentEntityTypeBuilder.ModelBuilder, foreignKeyConfigurationSource: null); Debug.Assert(relationshipBuilder.Metadata.EntityType == Metadata); _relationshipBuilders.Value.Add(foreignKey, relationshipBuilder, configurationSource); if (navigationToPrincipalName != null) { var navigationToPrincipalSet = dependentEntityTypeBuilder .Navigation(navigationToPrincipalName, foreignKey, pointsToPrincipal: true, configurationSource: configurationSource); Debug.Assert(navigationToPrincipalSet); } if (navigationToDependentName != null) { var navigationToDependentSet = principalEntityTypeBuilder .Navigation(navigationToDependentName, foreignKey, pointsToPrincipal: false, configurationSource: configurationSource); Debug.Assert(navigationToDependentSet); } return(relationshipBuilder); }