private static void CloneIndexes(IEntityType sourceEntityType, EntityType targetEntityType) { foreach (var index in sourceEntityType.GetDeclaredIndexes()) { var clonedIndex = targetEntityType.AddIndex( index.Properties.Select(p => targetEntityType.FindProperty(p.Name)).ToList()); clonedIndex.IsUnique = index.IsUnique; index.GetAnnotations().ForEach(annotation => clonedIndex[annotation.Name] = annotation.Value); } }
private static Metadata.Model CreateModel() { var model = new Metadata.Model() { StorageName = "MyDatabase" }; var dependentEntityType = new EntityType("Dependent"); dependentEntityType.SetTableName("MyTable0"); dependentEntityType.SetSchema("dbo"); var principalEntityType = new EntityType("Principal"); principalEntityType.SetTableName("MyTable1"); principalEntityType.SetSchema("dbo"); var dependentProperty = dependentEntityType.AddProperty("Id", typeof(int)); var principalProperty = principalEntityType.AddProperty("Id", typeof(int)); var property = dependentEntityType.AddProperty("MyProperty", typeof(string)); property.SetColumnName("MyColumn"); property = principalEntityType.AddProperty("MyProperty", typeof(string)); property.SetColumnName("MyColumn"); model.AddEntityType(principalEntityType); model.AddEntityType(dependentEntityType); principalProperty.Annotations.Add(new Annotation( MetadataExtensions.Annotations.StorageTypeName, "int")); dependentProperty.Annotations.Add(new Annotation( MetadataExtensions.Annotations.StorageTypeName, "int")); dependentEntityType.SetKey(dependentProperty); principalEntityType.SetKey(principalProperty); dependentEntityType.GetKey().SetKeyName("MyPK0"); principalEntityType.GetKey().SetKeyName("MyPK1"); var foreignKey = dependentEntityType.AddForeignKey(principalEntityType.GetKey(), dependentProperty); foreignKey.SetKeyName("MyFK"); foreignKey.Annotations.Add(new Annotation( MetadataExtensions.Annotations.CascadeDelete, "True")); var index = dependentEntityType.AddIndex(dependentProperty); index.SetIndexName("MyIndex"); index.IsUnique = true; return(model); }
private static IModel CreateModel() { var model = new Metadata.Model { StorageName = "MyDatabase" }; var dependentEntityType = new EntityType("Dependent"); dependentEntityType.SetSchema("dbo"); dependentEntityType.SetTableName("MyTable0"); var principalEntityType = new EntityType("Principal"); principalEntityType.SetSchema("dbo"); principalEntityType.SetTableName("MyTable1"); var dependentProperty = dependentEntityType.AddProperty("Id", typeof(int)); var principalProperty = principalEntityType.AddProperty("Id", typeof(int)); principalProperty.ValueGenerationOnSave = ValueGenerationOnSave.WhenInserting; model.AddEntityType(principalEntityType); model.AddEntityType(dependentEntityType); principalProperty.Annotations.Add(new Annotation( MetadataExtensions.Annotations.StorageTypeName, "int")); dependentProperty.Annotations.Add(new Annotation( MetadataExtensions.Annotations.StorageTypeName, "int")); dependentEntityType.SetKey(dependentProperty); principalEntityType.SetKey(principalProperty); dependentEntityType.GetKey().SetKeyName("MyPK0"); principalEntityType.GetKey().SetKeyName("MyPK1"); var foreignKey = dependentEntityType.AddForeignKey(principalEntityType.GetKey(), dependentProperty); foreignKey.SetKeyName("MyFK"); foreignKey.Annotations.Add(new Annotation( MetadataExtensions.Annotations.CascadeDelete, "True")); var index = dependentEntityType.AddIndex(dependentProperty); index.SetIndexName("MyIndex"); index.IsUnique = true; return model; }
public void Indexes_are_ordered_by_property_count_then_property_names() { var customerType = new EntityType(typeof(Customer), new Model()); var idProperty = customerType.GetOrAddProperty(Customer.IdProperty); var nameProperty = customerType.GetOrAddProperty(Customer.NameProperty); var otherProperty = customerType.GetOrAddProperty("OtherProperty", typeof(string), shadowProperty: true); var i2 = customerType.AddIndex(nameProperty); var i4 = customerType.AddIndex(new[] { idProperty, otherProperty }); var i3 = customerType.AddIndex(new[] { idProperty, nameProperty }); var i1 = customerType.AddIndex(idProperty); Assert.True(new[] { i1, i2, i3, i4 }.SequenceEqual(customerType.Indexes)); }
public void AddIndex_throws_if_duplicate() { var entityType = new EntityType(typeof(Customer), new Model()); var property1 = entityType.GetOrAddProperty(Customer.IdProperty); var property2 = entityType.GetOrAddProperty(Customer.NameProperty); entityType.AddIndex(new[] { property1, property2 }); Assert.Equal(Strings.DuplicateIndex("{'" + Customer.IdProperty.Name + "', '" + Customer.NameProperty.Name + "'}", typeof(Customer).FullName), Assert.Throws<InvalidOperationException>( () => entityType.AddIndex(new[] { property1, property2 })).Message); }
public void GetIndex_throws_if_index_not_found() { var entityType = new EntityType(typeof(Customer), new Model()); var property1 = entityType.GetOrAddProperty(Customer.IdProperty); var property2 = entityType.GetOrAddProperty(Customer.NameProperty); Assert.Equal(Strings.IndexNotFound("{'" + Customer.IdProperty.Name + "', '" + Customer.NameProperty.Name + "'}", typeof(Customer).FullName), Assert.Throws<ModelItemNotFoundException>( () => entityType.GetIndex(new[] { property1, property2 })).Message); entityType.AddIndex(property1); Assert.Equal(Strings.IndexNotFound("{'" + Customer.IdProperty.Name + "', '" + Customer.NameProperty.Name + "'}", typeof(Customer).FullName), Assert.Throws<ModelItemNotFoundException>( () => entityType.GetIndex(new[] { property1, property2 })).Message); }
public void AddIndex_throws_if_not_from_same_entity() { var entityType1 = new EntityType(typeof(Customer), new Model()); var entityType2 = new EntityType(typeof(Order), new Model()); var property1 = entityType1.GetOrAddProperty(Customer.IdProperty); var property2 = entityType1.GetOrAddProperty(Customer.NameProperty); Assert.Equal(Strings.IndexPropertiesWrongEntity("{'" + Customer.IdProperty.Name + "', '" + Customer.NameProperty.Name + "'}", typeof(Order).FullName), Assert.Throws<ArgumentException>( () => entityType2.AddIndex(new[] { property1, property2 })).Message); }
public void Can_add_retrieve_and_remove_indexes() { var entityType = new EntityType(typeof(Order), new Model()); var property1 = entityType.GetOrAddProperty(Order.IdProperty); var property2 = entityType.GetOrAddProperty(Order.CustomerIdProperty); Assert.Equal(0, entityType.Indexes.Count); Assert.Null(entityType.RemoveIndex(new Index(new[] { property1 }))); var index1 = entityType.GetOrAddIndex(property1); Assert.Equal(1, index1.Properties.Count); Assert.Same(index1, entityType.GetIndex(property1)); Assert.Same(index1, entityType.FindIndex(property1)); Assert.Same(property1, index1.Properties[0]); var index2 = entityType.AddIndex(new[] { property1, property2 }); Assert.Equal(2, index2.Properties.Count); Assert.Same(index2, entityType.GetOrAddIndex(new[] { property1, property2 })); Assert.Same(index2, entityType.FindIndex(new[] { property1, property2 })); Assert.Same(property1, index2.Properties[0]); Assert.Same(property2, index2.Properties[1]); Assert.Equal(2, entityType.Indexes.Count); Assert.Same(index1, entityType.Indexes[0]); Assert.Same(index2, entityType.Indexes[1]); Assert.Same(index1, entityType.RemoveIndex(index1)); Assert.Null(entityType.RemoveIndex(index1)); Assert.Equal(1, entityType.Indexes.Count); Assert.Same(index2, entityType.Indexes[0]); Assert.Same(index2, entityType.RemoveIndex(new Index(new[] { property1, property2 }))); Assert.Equal(0, entityType.Indexes.Count); }
public void AddIndex_validates_properties_from_same_entity() { var entityType1 = new EntityType("E1"); var entityType2 = new EntityType("E2"); var property1 = entityType1.AddProperty(Customer.IdProperty); var property2 = entityType1.AddProperty(Customer.NameProperty); Assert.Equal(Strings.FormatIndexPropertiesWrongEntity(entityType2.Name), Assert.Throws<ArgumentException>( () => entityType2.AddIndex(property1, property2)).Message); }
public void AddIndex_check_arguments() { var entityType = new EntityType(typeof(Order)); Assert.Equal( "properties", // ReSharper disable once AssignNullToNotNullAttribute Assert.Throws<ArgumentNullException>(() => entityType.AddIndex(null)).ParamName); Assert.Equal( Strings.FormatCollectionArgumentIsEmpty("properties"), Assert.Throws<ArgumentException>(() => entityType.AddIndex(new Property[0])).Message); }
public void Can_add_retrieve_and_remove_indexes() { var entityType = new EntityType(typeof(Order)); var property1 = entityType.AddProperty(Order.IdProperty); var property2 = entityType.AddProperty(Order.CustomerIdProperty); Assert.Equal(0, entityType.Indexes.Count); var index1 = entityType.AddIndex(property1); Assert.Equal(1, index1.Properties.Count); Assert.Same(property1, index1.Properties[0]); var index2 = entityType.AddIndex(property1, property2); Assert.Equal(2, index2.Properties.Count); Assert.Same(property1, index2.Properties[0]); Assert.Same(property2, index2.Properties[1]); Assert.Equal(2, entityType.Indexes.Count); Assert.Same(index1, entityType.Indexes[0]); Assert.Same(index2, entityType.Indexes[1]); entityType.RemoveIndex(index1); Assert.Equal(1, entityType.Indexes.Count); Assert.Same(index2, entityType.Indexes[0]); entityType.RemoveIndex(index2); Assert.Equal(0, entityType.Indexes.Count); }