public void Configure_has_index_on_multiple_properties_index_ordered()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Customer>()
            .HasIndex(e => new { e.AccountNumber, e.CustomerID, e.CustomerType });

            var model = modelBuilder.Build(ProviderRegistry.Sql2008_ProviderInfo);

            {
                var indexAttributes = ConfiguredIndexAttributes(model, "Customer", "CustomerID");
                Assert.Single(indexAttributes);

                indexAttributes.Single().AssertConfiguration("IX_AccountNumber_CustomerID_CustomerType", 1, null, null);
            }

            {
                var indexAttributes = ConfiguredIndexAttributes(model, "Customer", "AccountNumber");
                Assert.Single(indexAttributes);

                indexAttributes.Single().AssertConfiguration("IX_AccountNumber_CustomerID_CustomerType", 0, null, null);
            }

            {
                var indexAttributes = ConfiguredIndexAttributes(model, "Customer", "CustomerType");
                Assert.Single(indexAttributes);

                indexAttributes.Single().AssertConfiguration("IX_AccountNumber_CustomerID_CustomerType", 2, null, null);
            }
        }
Esempio n. 2
0
        public void Annotations_can_be_added_to_store_columns_using_fluent_API()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            var someObject = new Random();

            modelBuilder.Entity <UnitMeasure>().HasKey(u => u.UnitMeasureCode);
            modelBuilder.Entity <UnitMeasure>()
            .Property(u => u.UnitMeasureCode)
            .HasColumnAnnotation("Dog", "Woof")
            .HasColumnAnnotation("Cat", "Meow")
            .HasColumnAnnotation("Fox", "Its fur is red...")
            .HasColumnAnnotation("Fox", "...so beautiful")
            .HasColumnAnnotation("Elephant", "Toot")
            .HasColumnAnnotation("Elephant", null)
            .HasColumnAnnotation("Seal", someObject);

            var databaseMapping = BuildMapping(modelBuilder);

            databaseMapping.AssertValid();

            databaseMapping.Assert <UnitMeasure>("UnitMeasures")
            .Column("UnitMeasureCode")
            .HasAnnotation("Dog", "Woof")
            .HasAnnotation("Cat", "Meow")
            .HasAnnotation("Fox", "...so beautiful") // Last set wins
            .HasAnnotation("Seal", someObject)
            .HasNoAnnotation("Elephant");            // Null removes
        }
        private void Can_map_join_table_for_many_to_many_if_names_do_not_match_convention(
            Action <DynamicTypeDescriptionConfiguration <SomeRole>,
                    DynamicTypeDescriptionConfiguration <SomeUser>,
                    DynamicTypeDescriptionConfiguration <UserRole>,
                    AdventureWorksModelBuilder> configure)
        {
            DbDatabaseMapping databaseMapping;

            using (var roleConfiguration = new DynamicTypeDescriptionConfiguration <SomeRole>())
            {
                using (var userConfiguration = new DynamicTypeDescriptionConfiguration <SomeUser>())
                {
                    using (var userRoleConfiguration = new DynamicTypeDescriptionConfiguration <UserRole>())
                    {
                        var modelBuilder = new AdventureWorksModelBuilder();

                        configure(roleConfiguration, userConfiguration, userRoleConfiguration, modelBuilder);

                        databaseMapping = BuildMapping(modelBuilder);
                    }
                }
            }

            databaseMapping.Assert <UserRole>().HasColumns("UserId1", "UserId2", "RoleId1", "RoleId2");
            databaseMapping.Assert <UserRole>().ColumnCountEquals(4);
            databaseMapping.Assert <UserRole>().HasForeignKey(new[] { "UserId1", "UserId2" }, "Users");
            databaseMapping.Assert <UserRole>().HasForeignKey(new[] { "RoleId1", "RoleId2" }, "Roles");
        }
        public void Configure_multiple_has_index_overlap_creates_indexes()
        {
            const string index1Name = "ID_Then_Type";
            const string index2Name = "Type_Then_ID";

            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Customer>()
            .HasIndex(e => new { e.CustomerID, e.CustomerType })
            .HasName(index1Name);

            modelBuilder.Entity <Customer>()
            .HasIndex(e => new { e.CustomerType, e.CustomerID })
            .HasName(index2Name);

            var model = modelBuilder.Build(ProviderRegistry.Sql2008_ProviderInfo);

            {
                var indexAttributes = ConfiguredIndexAttributes(model, "Customer", "CustomerID");
                Assert.Equal(2, indexAttributes.Count());

                indexAttributes.First().AssertConfiguration(index1Name, 0, null, null);
                indexAttributes.Skip(1).First().AssertConfiguration(index2Name, 1, null, null);
            }

            {
                var indexAttributes = ConfiguredIndexAttributes(model, "Customer", "CustomerType");
                Assert.Equal(2, indexAttributes.Count());

                indexAttributes.First().AssertConfiguration(index1Name, 1, null, null);
                indexAttributes.Skip(1).First().AssertConfiguration(index2Name, 0, null, null);
            }
        }
        public void Configure_multiple_has_index_creates_indexes()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Customer>()
            .HasIndex(e => e.CustomerID);

            modelBuilder.Entity <Customer>()
            .HasIndex(e => e.CustomerType);

            var model = modelBuilder.Build(ProviderRegistry.Sql2008_ProviderInfo);

            {
                var indexAttributes = ConfiguredIndexAttributes(model, "Customer", "CustomerID");
                Assert.Single(indexAttributes);

                indexAttributes.Single().AssertConfiguration(null, null, null, null);
            }

            {
                var indexAttributes = ConfiguredIndexAttributes(model, "Customer", "CustomerType");
                Assert.Single(indexAttributes);

                indexAttributes.Single().AssertConfiguration(null, null, null, null);
            }
        }
Esempio n. 6
0
        public void HasKey_throws_on_reference_nav_prop()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            Assert.Throws <InvalidOperationException>(
                () => modelBuilder.Entity <Customer>().HasKey(c => c.CustomerDiscount))
            .ValidateMessage("ModelBuilder_KeyPropertiesMustBePrimitive", "CustomerDiscount", typeof(Customer));
        }
        public void Configure_is_max_length_on_property()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Customer>().Property(c => c.CustomerType).IsMaxLength();

            var databaseMapping = modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo);

            databaseMapping.Assert <Customer>(c => c.CustomerType).FacetEqual(true, f => f.IsMaxLength);
        }
        public void Duplicate_property_names_differing_by_case_are_uniquified()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <DuplicatePropNames>();

            var databaseMapping = modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo);

            databaseMapping.Assert <DuplicatePropNames>().HasColumns("Id", "name", "NAME");
        }
        public void Configure_nullable_scalar_property_as_required_using_api()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Product>().Property(p => p.ProductSubcategoryID).IsRequired();

            var databaseMapping = modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo);

            databaseMapping.Assert <Product>(p => p.ProductSubcategoryID).IsFalse(t => t.Nullable);
        }
Esempio n. 10
0
        public void Build_model_for_a_single_type_with_a_enum_key()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Enum_Product_PK>();

            var databaseMapping = BuildMapping(modelBuilder);

            Assert.Equal(1, databaseMapping.EntityContainerMappings.Single().EntitySetMappings.Count());
        }
Esempio n. 11
0
        public void Build_model_after_configuring_entity_set_name()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <TransactionHistoryArchive>().HasEntitySetName("Foos");

            var databaseMapping = modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo);

            Assert.True(databaseMapping.Model.Containers.Single().EntitySets.Any(es => es.Name == "Foos"));
        }
            public void Remove_an_existing_convention()
            {
                var modelBuilder = new AdventureWorksModelBuilder();

                modelBuilder.Entity <Customer>();
                modelBuilder.Conventions.Remove <IdKeyDiscoveryConvention>();

                Assert.Throws <ModelValidationException>(
                    () => BuildMapping(modelBuilder));
            }
Esempio n. 13
0
        public void Duplicate_property_names_differing_by_case_are_uniquified()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <DuplicatePropNames>();

            var databaseMapping = BuildMapping(modelBuilder);

            databaseMapping.Assert <DuplicatePropNames>().HasColumns("Id", "name", "NAME");
        }
Esempio n. 14
0
        public void Nested_config_class_with_private_property()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Configurations.Add(new CreditCard.CreditCardConfiguration());

            var databaseMapping = BuildMapping(modelBuilder);

            databaseMapping.Assert <CreditCard>().HasColumn("CardNumber");
        }
Esempio n. 15
0
        public void External_duplicate_association_configuration()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Configurations
            .Add(new ProductCategoryConfiguration())
            .Add(new ProductSubcategoryConfiguration());

            BuildMapping(modelBuilder);
        }
Esempio n. 16
0
        public void Build_model_after_configuring_entity_set_name()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <TransactionHistoryArchive>().HasEntitySetName("Foos");

            var databaseMapping = BuildMapping(modelBuilder);

            Assert.True(databaseMapping.Model.Containers.Single().EntitySets.Any(es => es.Name == "Foos"));
        }
Esempio n. 17
0
        public void Build_model_for_a_single_type_with_a_enum_key()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Enum_Product_PK>();

            var databaseMapping = modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo);

            Assert.Equal(1, databaseMapping.EntityContainerMappings.Single().EntitySetMappings.Count());
        }
Esempio n. 18
0
        public void External_duplicate_association_configuration()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Configurations
            .Add(new ProductCategoryConfiguration())
            .Add(new ProductSubcategoryConfiguration());

            modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo);
        }
Esempio n. 19
0
        public void Nested_config_class_with_private_property()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Configurations.Add(new CreditCard.CreditCardConfiguration());

            var databaseMapping = modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo);

            databaseMapping.Assert <CreditCard>().HasColumn("CardNumber");
        }
Esempio n. 20
0
        public void Remove_an_existing_convention()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity<Customer>();
            modelBuilder.Conventions.Remove<IdKeyDiscoveryConvention>();

            Assert.Throws<ModelValidationException>(
                () => modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo));
        }
Esempio n. 21
0
        public void Configure_nullable_scalar_property_as_required_using_annotation()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Product>();

            var databaseMapping = BuildMapping(modelBuilder);

            databaseMapping.Assert <Product>(p => p.SellEndDate).IsFalse(t => t.Nullable);
        }
Esempio n. 22
0
        public void Configure_nullable_scalar_property_as_required_using_api()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Product>().Property(p => p.ProductSubcategoryID).IsRequired();

            var databaseMapping = BuildMapping(modelBuilder);

            databaseMapping.Assert <Product>(p => p.ProductSubcategoryID).IsFalse(t => t.Nullable);
        }
Esempio n. 23
0
        public void Configure_is_max_length_on_property()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Customer>().Property(c => c.CustomerType).IsMaxLength();

            var databaseMapping = BuildMapping(modelBuilder);

            databaseMapping.Assert <Customer>(c => c.CustomerType).FacetEqual(true, f => f.IsMaxLength);
        }
            public void Add_derived_encapsulated_lightweight_convention()
            {
                var modelBuilder = new AdventureWorksModelBuilder();

                modelBuilder.Entity <LightweightEntity>();
                modelBuilder.Conventions.Add <LightweightTableConvention>();

                var databaseMapping = BuildMapping(modelBuilder);

                Assert.True(databaseMapping.Database.GetEntitySets().All(t => t.Table == "TheTable"));
            }
Esempio n. 25
0
        public void Decimal_property_gets_default_precision_by_convention()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <BillOfMaterials>();

            var databaseMapping = BuildMapping(modelBuilder);

            databaseMapping.Assert <BillOfMaterials>(b => b.PerAssemblyQty).FacetEqual((byte)18, f => f.Precision);
            databaseMapping.Assert <BillOfMaterials>(b => b.PerAssemblyQty).FacetEqual((byte)2, f => f.Scale);
        }
        public void Annotation_in_derived_class_when_base_class_processed_after_derived_class()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <StyledProduct>();
            modelBuilder.Entity <Product>();

            var databaseMapping = modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo);

            databaseMapping.Assert <StyledProduct>(s => s.Style).FacetEqual(150, f => f.MaxLength);
        }
Esempio n. 27
0
        public void Annotation_in_derived_class_when_base_class_processed_after_derived_class()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <StyledProduct>();
            modelBuilder.Entity <Product>();

            var databaseMapping = BuildMapping(modelBuilder);

            databaseMapping.Assert <StyledProduct>(s => s.Style).FacetEqual(150, f => f.MaxLength);
        }
Esempio n. 28
0
        public void Build_model_containing_a_complex_type_by_convention()
        {
            var modelBuilder = new AdventureWorksModelBuilder(typeof(UnitMeasure));

            modelBuilder.Entity <BillOfMaterials>();

            var databaseMapping = BuildMapping(modelBuilder);

            Assert.Equal(1, databaseMapping.EntityContainerMappings.Single().EntitySetMappings.Count());
            Assert.Equal(1, databaseMapping.Model.ComplexTypes.Count());
        }
            public void Add_custom_model_convention_with_ordering()
            {
                var modelBuilder = new AdventureWorksModelBuilder();

                modelBuilder.Entity <CountryRegion>();
                modelBuilder.Conventions.AddAfter <IdKeyDiscoveryConvention>(new CodeKeyDiscoveryConvention());

                var databaseMapping = BuildMapping(modelBuilder);

                Assert.Equal(1, databaseMapping.EntityContainerMappings.Single().EntitySetMappings.Count());
            }
        public void Decimal_property_gets_default_precision_by_convention()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <BillOfMaterials>();

            var databaseMapping = modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo);

            databaseMapping.Assert <BillOfMaterials>(b => b.PerAssemblyQty).FacetEqual((byte)18, f => f.Precision);
            databaseMapping.Assert <BillOfMaterials>(b => b.PerAssemblyQty).FacetEqual((byte)2, f => f.Scale);
        }