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);
            }
        }
        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);
            }
        }
        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 Build_model_containing_a_complex_type_with_instance_cspace_configuration_override()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <ProductDescription>()
            .Property(pd => pd.RowDetails.rowguid)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
            modelBuilder.ComplexType <RowDetails>()
            .Property(rd => rd.rowguid)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

            Assert.Throws <InvalidOperationException>(() => modelBuilder.Build(ProviderRegistry.Sql2008_ProviderInfo));
        }
        public void Configure_has_key_on_property_creates_index()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

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

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

            {
                var indexAttribute = ConfiguredPrimaryKeyIndexAttribute(model, "Customer");

                indexAttribute.AssertConfiguration(null, null, null, null);
            }
        }
        public void Configure_configure_key_on_property_index_clustered()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Customer>()
            .ConfigureKey()
            .IsClustered(true);

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

            {
                var indexAttribute = ConfiguredPrimaryKeyIndexAttribute(model, "Customer");

                indexAttribute.AssertConfiguration(null, null, null, true);
            }
        }
        public void Configure_has_index_on_property_index_clustered()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

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

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

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

                indexAttributes.Single().AssertConfiguration(null, null, null, true);
            }
        }
        public void Configure_has_key_on_multiple_properties_index_clustered()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Customer>()
            .HasKey(e => new { e.AccountNumber, e.CustomerID })
            .ConfigureKey()
            .IsClustered(true);

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

            {
                var indexAttribute = ConfiguredPrimaryKeyIndexAttribute(model, "Customer");

                indexAttribute.AssertConfiguration(null, null, null, true);
            }
        }
        public void Configure_configure_key_on_property_index_named()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Customer>()
            .HasKey(
                e => e.CustomerID,
                b => b.HasName("PK_Foo_Bar"));

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

            {
                var indexAttribute = ConfiguredPrimaryKeyIndexAttribute(model, "Customer");

                indexAttribute.AssertConfiguration("PK_Foo_Bar", null, null, null);
            }
        }
        public void Configure_has_key_has_index_creates_indexes_complex()
        {
            var modelBuilder = new AdventureWorksModelBuilder();

            modelBuilder.Entity <Customer>()
            .HasKey(e => new { e.CustomerID, e.AccountNumber })
            .ConfigureKey()
            .IsClustered(false);

            modelBuilder.Entity <Customer>()
            .HasIndex(e => new { e.CustomerType, e.rowguid })
            .IsUnique()
            .IsClustered();

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

            {
                var indexAttribute = ConfiguredPrimaryKeyIndexAttribute(model, "Customer");

                indexAttribute.AssertConfiguration(null, null, null, false);
            }

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

                indexAttributes.Single().AssertConfiguration("IX_CustomerType_rowguid", 0, true, true);
            }

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

                indexAttributes.Single().AssertConfiguration("IX_CustomerType_rowguid", 1, true, true);
            }
        }