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 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); } }
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); }
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()); }
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)); }
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"); }
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"); }
public void External_duplicate_association_configuration() { var modelBuilder = new AdventureWorksModelBuilder(); modelBuilder.Configurations .Add(new ProductCategoryConfiguration()) .Add(new ProductSubcategoryConfiguration()); BuildMapping(modelBuilder); }
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")); }
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()); }
public void External_duplicate_association_configuration() { var modelBuilder = new AdventureWorksModelBuilder(); modelBuilder.Configurations .Add(new ProductCategoryConfiguration()) .Add(new ProductSubcategoryConfiguration()); modelBuilder.BuildAndValidate(ProviderRegistry.Sql2008_ProviderInfo); }
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"); }
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)); }
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); }
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); }
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")); }
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); }
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); }
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); }