public void Can_add_and_remove_entity_by_name() { var model = new Model(); Assert.Null(model.FindEntityType(typeof(Customer).FullName)); Assert.Null(model.RemoveEntityType(typeof(Customer).FullName)); var entityType = model.AddEntityType(typeof(Customer).FullName); Assert.Null(entityType.ClrType); Assert.Equal(typeof(Customer).FullName, entityType.Name); Assert.NotNull(model.FindEntityType(typeof(Customer).FullName)); Assert.Same(model, entityType.Model); Assert.NotNull(entityType.Builder); Assert.Same(entityType, model.GetOrAddEntityType(typeof(Customer).FullName)); Assert.Equal(new[] { entityType }, model.GetEntityTypes().ToArray()); Assert.Same(entityType, model.RemoveEntityType(entityType.Name)); Assert.Null(model.RemoveEntityType(entityType.Name)); Assert.Null(model.FindEntityType(typeof(Customer).FullName)); Assert.Null(entityType.Builder); }
public void Can_add_weak_entity_types() { IMutableModel model = new Model(); var customerType = model.AddEntityType(typeof(Customer)); var idProperty = customerType.GetOrAddProperty(Customer.IdProperty); var customerKey = customerType.AddKey(idProperty); var dependentOrderType = model.AddEntityType(typeof(Order), nameof(Customer.Orders), customerType); var fkProperty = dependentOrderType.AddProperty("ShadowId", typeof(int)); var orderKey = dependentOrderType.AddKey(fkProperty); var fk = dependentOrderType.AddForeignKey(fkProperty, customerKey, customerType); var index = dependentOrderType.AddIndex(fkProperty); Assert.Same(fkProperty, dependentOrderType.GetProperties().Single()); Assert.Same(orderKey, dependentOrderType.GetKeys().Single()); Assert.Same(fk, dependentOrderType.GetForeignKeys().Single()); Assert.Same(index, dependentOrderType.GetIndexes().Single()); Assert.Equal(new[] { customerType, dependentOrderType }, model.GetEntityTypes()); Assert.True(model.HasEntityTypeWithDefiningNavigation(typeof(Order))); Assert.True(model.HasEntityTypeWithDefiningNavigation(typeof(Order).DisplayName())); Assert.Same( dependentOrderType, model.FindEntityType(typeof(Order).DisplayName(), nameof(Customer.Orders), customerType)); Assert.Same( dependentOrderType, model.FindEntityType(typeof(Order).DisplayName(), nameof(Customer.Orders), (IEntityType)customerType)); Assert.Equal( CoreStrings.ClashingWeakEntityType(typeof(Order).DisplayName(fullName: false)), Assert.Throws <InvalidOperationException>(() => model.AddEntityType(typeof(Order))).Message); Assert.Equal( CoreStrings.ClashingNonWeakEntityType( nameof(Customer) + "." + nameof(Customer.Orders) + "#" + nameof(Order) + "." + nameof(Order.Customer) + "#" + nameof(Customer)), Assert.Throws <InvalidOperationException>( () => model.AddEntityType(typeof(Customer), nameof(Order.Customer), dependentOrderType)).Message); Assert.Equal( CoreStrings.ForeignKeySelfReferencingDependentEntityType( nameof(Customer) + "." + nameof(Customer.Orders) + "#" + nameof(Order)), Assert.Throws <InvalidOperationException>( () => dependentOrderType.AddForeignKey(fkProperty, orderKey, dependentOrderType)).Message); Assert.Equal( CoreStrings.EntityTypeInUseByForeignKey( nameof(Customer) + "." + nameof(Customer.Orders) + "#" + nameof(Order), nameof(Customer), fk.Properties.Format()), Assert.Throws <InvalidOperationException>(() => model.RemoveEntityType(dependentOrderType)).Message); dependentOrderType.RemoveForeignKey(fk.Properties, fk.PrincipalKey, fk.PrincipalEntityType); Assert.Same( dependentOrderType, model.RemoveEntityType( typeof(Order), nameof(Customer.Orders), customerType)); Assert.Null(((EntityType)dependentOrderType).Builder); Assert.Null(model.RemoveEntityType(dependentOrderType)); }
public void Adding_duplicate_entity_by_name_throws() { var model = new Model(); Assert.Null(model.RemoveEntityType(typeof(Customer))); model.AddEntityType(typeof(Customer)); Assert.Equal( CoreStrings.DuplicateEntityType(typeof(Customer).FullName), Assert.Throws <InvalidOperationException>(() => model.AddEntityType(typeof(Customer).FullName)).Message); }
public void Cannot_remove_entity_type_when_it_has_derived_types() { var model = new Model(); var customerType = model.GetOrAddEntityType(typeof(Customer)); var specialCustomerType = model.GetOrAddEntityType(typeof(SpecialCustomer)); specialCustomerType.HasBaseType(customerType); Assert.Equal( CoreStrings.EntityTypeInUseByDerived(typeof(Customer).Name, typeof(SpecialCustomer).Name), Assert.Throws <InvalidOperationException>(() => model.RemoveEntityType(customerType.Name)).Message); }
public void Can_add_and_remove_entity_by_type() { var model = new Model(); Assert.Null(model.FindEntityType(typeof(Customer))); Assert.Null(model.RemoveEntityType(typeof(Customer))); var entityType = model.AddEntityType(typeof(Customer)); Assert.Equal(typeof(Customer), entityType.ClrType); Assert.NotNull(model.FindEntityType(typeof(Customer))); Assert.Same(model, entityType.Model); Assert.NotNull(entityType.Builder); Assert.Same(entityType, model.GetOrAddEntityType(typeof(Customer))); Assert.Equal(new[] { entityType }, model.GetEntityTypes().ToArray()); Assert.Same(entityType, model.RemoveEntityType(entityType.ClrType)); Assert.Null(model.RemoveEntityType(entityType.ClrType)); Assert.Null(model.FindEntityType(typeof(Customer))); Assert.Null(entityType.Builder); }
public void Cannot_remove_entity_type_when_referenced_by_foreign_key() { var model = new Model(); var customerType = model.GetOrAddEntityType(typeof(Customer)); var idProperty = customerType.GetOrAddProperty(Customer.IdProperty); var customerKey = customerType.GetOrAddKey(idProperty); var orderType = model.GetOrAddEntityType(typeof(Order)); var customerFk = orderType.GetOrAddProperty(Order.CustomerIdProperty); orderType.AddForeignKey(customerFk, customerKey, customerType); Assert.Equal( CoreStrings.EntityTypeInUseByReferencingForeignKey( typeof(Customer).Name, "{'" + Order.CustomerIdProperty.Name + "'}", typeof(Order).Name), Assert.Throws <InvalidOperationException>(() => model.RemoveEntityType(customerType.Name)).Message); }
public void Cannot_remove_entity_type_when_referenced_by_foreign_key() { var model = new Model(); var customerType = model.GetOrAddEntityType(typeof(Customer)); var idProperty = customerType.GetOrAddProperty(Customer.IdProperty); var customerKey = customerType.GetOrAddKey(idProperty); var orderType = model.GetOrAddEntityType(typeof(Order)); var customerFk = orderType.GetOrAddProperty(Order.CustomerIdProperty); orderType.AddForeignKey(customerFk, customerKey, customerType); Assert.Equal( CoreStrings.EntityTypeInUseByForeignKey( typeof(Customer).Name, "{'" + Order.CustomerIdProperty.Name + "'}", typeof(Order).Name), Assert.Throws<InvalidOperationException>(() => model.RemoveEntityType(customerType.Name)).Message); }
public void Adding_duplicate_entity_by_name_throws() { var model = new Model(); Assert.Null(model.RemoveEntityType(typeof(Customer))); model.AddEntityType(typeof(Customer)); Assert.Equal( CoreStrings.DuplicateEntityType(typeof(Customer).FullName), Assert.Throws<InvalidOperationException>(() => model.AddEntityType(typeof(Customer).FullName)).Message); }
public void Cannot_remove_entity_type_when_it_has_derived_types() { var model = new Model(); var customerType = model.GetOrAddEntityType(typeof(Customer)); var specialCustomerType = model.GetOrAddEntityType(typeof(SpecialCustomer)); specialCustomerType.HasBaseType(customerType); Assert.Equal( CoreStrings.EntityTypeInUseByDerived(typeof(Customer).Name, typeof(SpecialCustomer).Name), Assert.Throws<InvalidOperationException>(() => model.RemoveEntityType(customerType.Name)).Message); }