Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }