public void Throws_for_multiple_identity_properties() { var modelBuilder = InMemoryTestHelpers.Instance.CreateConventionBuilder(); modelBuilder.Entity <Dog>().Property(c => c.Type).UseMySqlIdentityColumn(); modelBuilder.Entity <Dog>().Property <int?>("Tag").UseMySqlIdentityColumn(); VerifyError(MySqlStrings.MultipleIdentityColumns("'Dog.Tag', 'Dog.Type'", nameof(Dog)), modelBuilder.Model); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> protected override void ValidateSharedColumnsCompatibility(IReadOnlyList <IEntityType> mappedTypes, string tableName) { base.ValidateSharedColumnsCompatibility(mappedTypes, tableName); var identityColumns = new List <IProperty>(); var propertyMappings = new Dictionary <string, IProperty>(); foreach (var property in mappedTypes.SelectMany(et => et.GetDeclaredProperties())) { var propertyAnnotations = property.Relational(); var columnName = propertyAnnotations.ColumnName; if (propertyMappings.TryGetValue(columnName, out var duplicateProperty)) { var propertyStrategy = property.MySql().ValueGenerationStrategy; var duplicatePropertyStrategy = duplicateProperty.MySql().ValueGenerationStrategy; if (propertyStrategy != duplicatePropertyStrategy && (propertyStrategy == MySqlValueGenerationStrategy.IdentityColumn || duplicatePropertyStrategy == MySqlValueGenerationStrategy.IdentityColumn)) { throw new InvalidOperationException( MySqlStrings.DuplicateColumnNameValueGenerationStrategyMismatch( duplicateProperty.DeclaringEntityType.DisplayName(), duplicateProperty.Name, property.DeclaringEntityType.DisplayName(), property.Name, columnName, tableName)); } } else { propertyMappings[columnName] = property; if (property.MySql().ValueGenerationStrategy == MySqlValueGenerationStrategy.IdentityColumn) { identityColumns.Add(property); } } } if (identityColumns.Count > 1) { var sb = new StringBuilder() .AppendJoin(identityColumns.Select(p => "'" + p.DeclaringEntityType.DisplayName() + "." + p.Name + "'")); throw new InvalidOperationException(MySqlStrings.MultipleIdentityColumns(sb, tableName)); } }
public void Detects_multiple_identity_properties(bool obsolete) { var modelBuilder = CreateConventionalModelBuilder(); modelBuilder.Entity <Dog>().Property(d => d.Id).ValueGeneratedNever(); if (obsolete) { #pragma warning disable 618 modelBuilder.Entity <Dog>().Property(c => c.Type).UseMySqlIdentityColumn(); modelBuilder.Entity <Dog>().Property <int?>("Tag").UseMySqlIdentityColumn(); #pragma warning restore 618 } else { modelBuilder.Entity <Dog>().Property(c => c.Type).UseIdentityColumn(); modelBuilder.Entity <Dog>().Property <int?>("Tag").UseIdentityColumn(); } VerifyError(MySqlStrings.MultipleIdentityColumns("'Dog.Tag', 'Dog.Type'", nameof(Dog)), modelBuilder.Model); }