コード例 #1
0
            public virtual void Finds_existing_navigation_to_principal_and_uses_associated_FK()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<Customer>();
                modelBuilder
                    .Entity<Order>().HasOne(o => o.Customer).WithMany()
                    .ForeignKey(c => c.CustomerId);
                modelBuilder.Ignore<OrderDetails>();
                modelBuilder.Ignore<CustomerDetails>();

                var dependentType = model.GetEntityType(typeof(Order));
                var principalType = model.GetEntityType(typeof(Customer));

                var principalKey = principalType.GetKeys().Single();
                var dependentKey = dependentType.GetKeys().Single();

                modelBuilder.Entity<Order>().HasOne(e => e.Customer).WithMany(e => e.Orders);

                var newFk = dependentType.Navigations.Single().ForeignKey;
                Assert.Equal(nameof(Order.CustomerId), newFk.Properties.Single().Name);
                Assert.Same(newFk, principalType.Navigations.Single().ForeignKey);
                Assert.Empty(principalType.GetForeignKeys());
                Assert.Same(principalKey, principalType.GetKeys().Single());
                Assert.Same(dependentKey, dependentType.GetKeys().Single());
                Assert.Same(principalKey, principalType.GetPrimaryKey());
                Assert.Same(dependentKey, dependentType.GetPrimaryKey());
            }
コード例 #2
0
            public virtual void Replaces_existing_navigation_to_principal()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<CustomerDetails>().Reference(c => c.Customer).InverseReference();
                modelBuilder.Ignore<Order>();

                var dependentType = model.GetEntityType(typeof(CustomerDetails));
                var principalType = model.GetEntityType(typeof(Customer));
                var expectedPrincipalProperties = principalType.Properties.ToList();
                var expectedDependentProperties = dependentType.Properties.ToList();

                var principalKey = principalType.GetKeys().Single();
                var dependentKey = dependentType.GetKeys().Single();

                modelBuilder.Entity<Customer>().Reference(e => e.Details).InverseReference(e => e.Customer);

                var fk = dependentType.GetForeignKeys().Single();
                Assert.Same(fk.DependentToPrincipal, dependentType.Navigations.Single());
                Assert.Same(fk.PrincipalToDependent, principalType.Navigations.Single());
                AssertEqual(expectedPrincipalProperties, principalType.Properties);
                AssertEqual(expectedDependentProperties, dependentType.Properties);
                Assert.Empty(principalType.GetForeignKeys());
                Assert.Same(principalKey, principalType.GetKeys().Single());
                Assert.Same(dependentKey, dependentType.GetKeys().Single());
                Assert.Same(principalKey, principalType.GetPrimaryKey());
                Assert.Same(dependentKey, dependentType.GetPrimaryKey());
            }
コード例 #3
0
        public void OneToMany_finds_existing_nav_to_principal_and_uses_associated_FK()
        {
            var model = new Model();
            var modelBuilder = new ModelBuilder(new ConventionSet(), model);
            modelBuilder.Entity<Customer>().Key(c => c.Id);
            modelBuilder.Entity<Order>().Metadata.AddForeignKey(
                model.GetEntityType(typeof(Order)).GetProperty("CustomerId"),
                model.GetEntityType(typeof(Customer)).GetPrimaryKey());

            var dependentType = model.GetEntityType(typeof(Order));
            var principalType = model.GetEntityType(typeof(Customer));
            var fk = dependentType.GetForeignKeys().Single();

            var navigation = dependentType.AddNavigation("Customer", fk, true);

            var principalPropertyCount = principalType.PropertyCount;
            var dependentPropertyCount = dependentType.PropertyCount;
            var principalKey = principalType.GetKeys().Single();
            var dependentKey = dependentType.GetKeys().Single();

            modelBuilder.Entity(typeof(Customer)).Collection(typeof(Order), "Orders").InverseReference("Customer");

            Assert.Same(fk, dependentType.GetForeignKeys().Single());
            Assert.Same(navigation, dependentType.Navigations.Single());
            Assert.Equal("Orders", principalType.Navigations.Single().Name);
            Assert.Same(fk, dependentType.Navigations.Single().ForeignKey);
            Assert.Same(fk, principalType.Navigations.Single().ForeignKey);
            Assert.Equal(principalPropertyCount, principalType.PropertyCount);
            Assert.Equal(dependentPropertyCount, dependentType.PropertyCount);
            Assert.Empty(principalType.GetForeignKeys());
            Assert.Same(principalKey, principalType.GetKeys().Single());
            Assert.Same(dependentKey, dependentType.GetKeys().Single());
            Assert.Same(principalKey, principalType.GetPrimaryKey());
            Assert.Same(dependentKey, dependentType.GetPrimaryKey());
        }
コード例 #4
0
            public virtual void Finds_existing_navigation_to_principal_and_uses_associated_FK()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<Customer>();
                modelBuilder
                    .Entity<Order>().Reference(c => c.Customer).InverseCollection()
                    .ForeignKey(c => c.CustomerId);
                modelBuilder.Ignore<OrderDetails>();
                modelBuilder.Ignore<CustomerDetails>();

                var dependentType = model.GetEntityType(typeof(Order));
                var principalType = model.GetEntityType(typeof(Customer));
                var fk = dependentType.GetForeignKeys().Single();

                var navigation = dependentType.GetNavigation("Customer");

                var principalKey = principalType.GetKeys().Single();
                var dependentKey = dependentType.GetKeys().Single();

                modelBuilder.Entity<Customer>().Collection(e => e.Orders).InverseReference(e => e.Customer);

                Assert.Equal(1, dependentType.GetForeignKeys().Count());
                Assert.Equal("Orders", principalType.Navigations.Single().Name);
                Assert.Same(fk.PrincipalKey, principalType.Navigations.Single().ForeignKey.PrincipalKey);
                AssertEqual(new[] { "AlternateKey", principalKey.Properties.Single().Name, Customer.NameProperty.Name }, principalType.Properties.Select(p => p.Name));
                AssertEqual(new[] { "AnotherCustomerId", fk.Properties.Single().Name, dependentKey.Properties.Single().Name }, dependentType.Properties.Select(p => p.Name));
                Assert.Empty(principalType.GetForeignKeys());
                Assert.Same(principalKey, principalType.GetKeys().Single());
                Assert.Same(dependentKey, dependentType.GetKeys().Single());
                Assert.Same(principalKey, principalType.GetPrimaryKey());
                Assert.Same(dependentKey, dependentType.GetPrimaryKey());
            }
コード例 #5
0
            public virtual void Finds_existing_navigations_and_uses_associated_FK()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<Customer>();
                modelBuilder
                    .Entity<CustomerDetails>().HasOne(d => d.Customer).WithOne(c => c.Details)
                    .ForeignKey<CustomerDetails>(c => c.Id);
                modelBuilder.Ignore<Order>();

                var dependentType = model.GetEntityType(typeof(CustomerDetails));
                var principalType = model.GetEntityType(typeof(Customer));
                var fk = dependentType.GetForeignKeys().Single();

                var navToPrincipal = dependentType.GetNavigation(nameof(CustomerDetails.Customer));
                var navToDependent = principalType.GetNavigation(nameof(Customer.Details));

                var principalKey = principalType.GetKeys().Single();
                var dependentKey = dependentType.GetKeys().Single();

                modelBuilder.Entity<Customer>().HasOne(e => e.Details).WithOne(e => e.Customer);

                Assert.Equal(1, dependentType.GetForeignKeys().Count());
                Assert.Same(navToPrincipal, dependentType.Navigations.Single());
                Assert.Same(navToDependent, principalType.Navigations.Single());
                Assert.Same(fk.PrincipalKey, principalType.Navigations.Single().ForeignKey.PrincipalKey);
                AssertEqual(new[] { "AlternateKey", principalKey.Properties.Single().Name, Customer.NameProperty.Name }, principalType.Properties.Select(p => p.Name));
                AssertEqual(new[] { dependentKey.Properties.Single().Name }, dependentType.Properties.Select(p => p.Name));
                Assert.Empty(principalType.GetForeignKeys());
                Assert.Same(principalKey, principalType.GetKeys().Single());
                Assert.Same(dependentKey, dependentType.GetKeys().Single());
                Assert.Same(principalKey, principalType.GetPrimaryKey());
                Assert.Same(dependentKey, dependentType.GetPrimaryKey());
            }
コード例 #6
0
 private static void AddNavigationToPrincipal(Microsoft.Data.Entity.Metadata.Model model, Type type, string fk, string navigation)
 {
     model.GetEntityType(type)
     .AddNavigation(
         navigation,
         model.GetEntityType(type).ForeignKeys.Single(
             f => f.Properties.Count == 1 && f.Properties.Single().Name == fk),
         pointsToPrincipal: true);
 }
コード例 #7
0
            public virtual void NotMappedAttribute_removes_ambiguity_in_conventional_relationship_building()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<Book>();

                Assert.Contains("Details", model.GetEntityType(typeof(Book)).Navigations.Select(nav => nav.Name));
                Assert.Contains("AnotherBook", model.GetEntityType(typeof(BookDetails)).Navigations.Select(nav => nav.Name));
                Assert.DoesNotContain("Book", model.GetEntityType(typeof(BookDetails)).Navigations.Select(nav => nav.Name));
            }
コード例 #8
0
 private static void AddNavigationToDependent(Microsoft.Data.Entity.Metadata.Model model, Type type, Type dependentType, string fk1, string fk2, string navigation)
 {
     model.GetEntityType(type)
     .AddNavigation(
         navigation,
         model.GetEntityType(dependentType).ForeignKeys.Single(
             f => f.Properties.Count == 2 &&
             f.Properties.Any(p => p.Name == fk1) &&
             f.Properties.Any(p => p.Name == fk2)),
         pointsToPrincipal: false);
 }
コード例 #9
0
            public virtual void InversePropertyAttribute_removes_ambiguity_in_conventional_relationalship_building()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<Book>();

                Assert.Contains("Book", model.GetEntityType(typeof(BookLabel)).Navigations.Select(nav => nav.Name));
                Assert.Equal("Label", model.GetEntityType(typeof(BookLabel)).FindNavigation("Book").ForeignKey.PrincipalToDependent.Name);

                Assert.Contains("AlternateLabel", model.GetEntityType(typeof(Book)).Navigations.Select(nav => nav.Name));
                Assert.Null(model.GetEntityType(typeof(Book)).FindNavigation("AlternateLabel").ForeignKey.PrincipalToDependent);
            }
コード例 #10
0
            public virtual void ForeignKeyAttribute_creates_two_relationships_if_applied_on_property_on_both_side()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<Post>();

                Assert.Null(model.GetEntityType(typeof(Post)).FindNavigation("Author").ForeignKey.PrincipalToDependent);
                Assert.Equal("AuthorCode", model.GetEntityType(typeof(Post)).FindNavigation("Author").ForeignKey.Properties.First().Name);

                Assert.Null(model.GetEntityType(typeof(Author)).FindNavigation("Post").ForeignKey.PrincipalToDependent);
                Assert.Equal("PostNumber", model.GetEntityType(typeof(Author)).FindNavigation("Post").ForeignKey.Properties.First().Name);
            }
コード例 #11
0
ファイル: ModelTest.cs プロジェクト: Nyaoso/EntityFramework
        public void Can_get_entity_by_type()
        {
            var model = new Model();
            var entityType = new EntityType(typeof(Customer));
            model.AddEntityType(entityType);

            Assert.Same(entityType, model.GetEntityType(typeof(Customer)));
            Assert.Same(entityType, model.TryGetEntityType(typeof(Customer)));
            Assert.Null(model.TryGetEntityType(typeof(string)));

            Assert.Equal(
                Strings.FormatEntityTypeNotFound("String"),
                Assert.Throws<ModelItemNotFoundException>(() => model.GetEntityType(typeof(string))).Message);
        }
コード例 #12
0
            public virtual void ForeignKeyAttribute_does_not_set_foreign_key_properties_when_names_on_property_and_navigation_do_not_match()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<Author>();

                Assert.Equal("AuthorId", model.GetEntityType(typeof(AuthorDetails)).FindNavigation("Author").ForeignKey.Properties.First().Name);
            }
コード例 #13
0
            public virtual void ForeignKeyAttribute_does_not_set_foreign_key_properties_when_applied_on_properties_for_composite_foreign_key()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<PostDetails>();

                Assert.Equal("AuthorId", model.GetEntityType(typeof(PostDetails)).FindNavigation("Author").ForeignKey.Properties.First().Name);
            }
コード例 #14
0
            public virtual void Can_get_entity_builder_for_clr_type()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);

                var entityBuilder = modelBuilder.Entity<Customer>();

                Assert.NotNull(entityBuilder);
                Assert.Equal(typeof(Customer).FullName, model.GetEntityType(typeof(Customer)).Name);
            }
コード例 #15
0
        public void Can_get_entity_builder_for_clr_type_non_generic()
        {
            var model = new Model();
            var modelBuilder = new BasicModelBuilder(model);

            var entityBuilder = modelBuilder.Entity(typeof(Customer));

            Assert.NotNull(entityBuilder);
            Assert.Equal(typeof(Customer).FullName, model.GetEntityType(typeof(Customer)).Name);
        }
コード例 #16
0
            public virtual void Can_set_entity_key_from_clr_property()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);

                modelBuilder.Entity<Customer>().HasKey(b => b.Id);

                var entity = model.GetEntityType(typeof(Customer));

                Assert.Equal(1, entity.GetPrimaryKey().Properties.Count);
                Assert.Equal(Customer.IdProperty.Name, entity.GetPrimaryKey().Properties.First().Name);
            }
コード例 #17
0
        public void Can_set_entity_key_from_clr_property()
        {
            var model = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder.Entity<Customer>().Key(e => e.Id);

            var entity = model.GetEntityType(typeof(Customer));

            Assert.Equal(1, entity.GetKey().Properties.Count());
            Assert.Equal("Id", entity.GetKey().Properties.First().Name);
        }
コード例 #18
0
        public void Can_set_composite_entity_key_from_clr_properties()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder
            .Entity <Customer>()
            .Key(e => new { e.Id, e.Name });

            var entity = model.GetEntityType(typeof(Customer));

            Assert.Equal(2, entity.GetKey().Properties.Count());
            Assert.Equal("Id", entity.GetKey().Properties.First().Name);
            Assert.Equal("Name", entity.GetKey().Properties.Last().Name);
        }
コード例 #19
0
            public virtual void Finds_existing_navigations_and_uses_associated_FK()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<Customer>()
                    .HasMany(e => e.Orders).WithOne(e => e.Customer)
                    .ForeignKey(e => e.CustomerId);
                modelBuilder.Entity<Order>();
                modelBuilder.Ignore<OrderDetails>();
                modelBuilder.Ignore<CustomerDetails>();

                var dependentType = model.GetEntityType(typeof(Order));
                var principalType = model.GetEntityType(typeof(Customer));
                var fk = dependentType.GetForeignKeys().Single();

                var navToPrincipal = dependentType.GetOrAddNavigation("Customer", fk, pointsToPrincipal: true);
                var navToDependent = principalType.GetOrAddNavigation("Orders", fk, pointsToPrincipal: false);

                var principalKey = principalType.GetKeys().Single();
                var dependentKey = dependentType.GetKeys().Single();

                modelBuilder.Entity<Order>().HasOne(e => e.Customer).WithMany(e => e.Orders);

                Assert.Same(fk, dependentType.GetForeignKeys().Single());
                Assert.Same(navToPrincipal, dependentType.Navigations.Single());
                Assert.Same(navToDependent, principalType.Navigations.Single());
                Assert.Same(fk, dependentType.Navigations.Single().ForeignKey);
                Assert.Same(fk, principalType.Navigations.Single().ForeignKey);
                AssertEqual(new[] { "AlternateKey", principalKey.Properties.Single().Name, Customer.NameProperty.Name }, principalType.Properties.Select(p => p.Name));
                AssertEqual(new[] { "AnotherCustomerId", fk.Properties.Single().Name, dependentKey.Properties.Single().Name }, dependentType.Properties.Select(p => p.Name));
                Assert.Empty(principalType.GetForeignKeys());
                Assert.Same(principalKey, principalType.GetKeys().Single());
                Assert.Same(dependentKey, dependentType.GetKeys().Single());
                Assert.Same(principalKey, principalType.GetPrimaryKey());
                Assert.Same(dependentKey, dependentType.GetPrimaryKey());
            }
コード例 #20
0
            public virtual void Replaces_existing_navigation_to_principal()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Entity<CustomerDetails>().HasOne(c => c.Customer).WithOne();
                modelBuilder.Ignore<Order>();

                var dependentType = model.GetEntityType(typeof(CustomerDetails));
                var principalType = model.GetEntityType(typeof(Customer));

                var principalKey = principalType.GetKeys().Single();
                var dependentKey = dependentType.GetKeys().Single();

                modelBuilder.Entity<Customer>().HasOne(e => e.Details).WithOne(e => e.Customer);

                var fk = dependentType.GetForeignKeys().Single();
                Assert.Empty(principalType.GetForeignKeys());
                Assert.Same(fk.DependentToPrincipal, dependentType.Navigations.Single());
                Assert.Same(fk.PrincipalToDependent, principalType.Navigations.Single());
                Assert.Same(principalKey, principalType.GetKeys().Single());
                Assert.Same(dependentKey, dependentType.GetKeys().Single());
                Assert.Same(principalKey, principalType.GetPrimaryKey());
                Assert.Same(dependentKey, dependentType.GetPrimaryKey());
            }
コード例 #21
0
        public void Can_add_index_when_no_clr_type()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder.Entity("Customer", b =>
            {
                b.Property <string>("Name");
                b.Indexes(ixs => ixs.Index("Name"));
            });

            var entityType = model.GetEntityType(typeof(Customer));

            Assert.Equal(1, entityType.Indexes.Count());
        }
コード例 #22
0
        public void Can_set_entity_key_from_CLR_property_non_generic()
        {
            var model = new Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder.Entity(typeof(Customer), b =>
                {
                    b.Property<int>("Id");
                    b.Key("Id");
                });

            var entity = model.GetEntityType(typeof(Customer));

            Assert.Equal(1, entity.GetPrimaryKey().Properties.Count());
            Assert.Equal("Id", entity.GetPrimaryKey().Properties.First().Name);
        }
コード例 #23
0
        public void Can_set_entity_key_from_property_name_when_no_clr_property()
        {
            var model = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder.Entity<Customer>(b =>
                {
                    b.Property<int>("Id");
                    b.Key("Id");
                });

            var entity = model.GetEntityType(typeof(Customer));

            Assert.Equal(1, entity.GetKey().Properties.Count());
            Assert.Equal("Id", entity.GetKey().Properties.First().Name);
        }
コード例 #24
0
        public void Can_set_use_of_store_sequence_with_name_and_block_size()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder
            .Entity <Customer>()
            .Property(c => c.Name).UseStoreSequence("UltrasonicTarsier", 17);

            var property = model.GetEntityType(typeof(Customer)).GetProperty("Name");

            Assert.Equal(ValueGenerationOnAdd.Server, property.ValueGenerationOnAdd);
            Assert.Equal(ValueGenerationOnSave.None, property.ValueGenerationOnSave);
            Assert.Equal("UltrasonicTarsier", property["StoreSequenceName"]);
            Assert.Equal("17", property["StoreSequenceBlockSize"]);
        }
コード例 #25
0
        public void Can_set_entity_key_from_property_name_when_no_clr_type()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder.Entity("Customer", b =>
            {
                b.Property <int>("Id");
                b.Key("Id");
            });

            var entity = model.GetEntityType(typeof(Customer));

            Assert.Equal(1, entity.GetKey().Properties.Count());
            Assert.Equal("Id", entity.GetKey().Properties.First().Name);
        }
コード例 #26
0
        public void Can_create_a_model_builder_with_given_conventions_and_model()
        {
            var convention = new TestConvention();
            var conventions = new ConventionSet();
            conventions.EntityTypeAddedConventions.Add(convention);

            var model = new Model();
            var modelBuilder = new ModelBuilder(conventions, model);

            Assert.Same(model, modelBuilder.Model);

            modelBuilder.Entity<Random>();

            Assert.True(convention.Applied);
            Assert.NotNull(model.GetEntityType(typeof(Random)));
        }
コード例 #27
0
        public void Can_set_composite_entity_key_from_property_names_when_no_clr_type()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder.Entity("Customer", ps =>
            {
                ps.Property <int>("Id");
                ps.Property <string>("Name");
                ps.Key("Id", "Name");
            });

            var entity = model.GetEntityType(typeof(Customer));

            Assert.Equal(2, entity.GetKey().Properties.Count());
            Assert.Equal("Id", entity.GetKey().Properties.First().Name);
            Assert.Equal("Name", entity.GetKey().Properties.Last().Name);
        }
コード例 #28
0
        public void Can_set_entity_key_with_annotations()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder
            .Entity <Customer>()
            .Key(k => k.Properties(e => new { e.Id, e.Name })
                 .Annotation("A1", "V1")
                 .Annotation("A2", "V2"));

            var entity = model.GetEntityType(typeof(Customer));

            Assert.Equal(2, entity.GetKey().Properties.Count());
            Assert.Equal(new[] { "Id", "Name" }, entity.GetKey().Properties.Select(p => p.Name));
            Assert.Equal("V1", entity.GetKey()["A1"]);
            Assert.Equal("V2", entity.GetKey()["A2"]);
        }
コード例 #29
0
        public void Can_set_composite_entity_key_from_property_names_when_mixed_properties()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder.Entity <Customer>(b =>
            {
                b.Property(e => e.Id);
                b.Property <string>("Name");
                b.Key("Id", "Name");
            });

            var entity = model.GetEntityType(typeof(Customer));

            Assert.Equal(2, entity.GetKey().Properties.Count());
            Assert.Equal("Id", entity.GetKey().Properties.First().Name);
            Assert.Equal("Name", entity.GetKey().Properties.Last().Name);
        }
コード例 #30
0
            public virtual void Can_set_entity_key_from_property_name_when_no_clr_property()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);

                modelBuilder.Entity<Customer>(b =>
                    {
                        b.Property<int>(Customer.IdProperty.Name + 1);
                        b.Ignore(p => p.Details);
                        b.Ignore(p => p.Orders);
                        b.HasKey(Customer.IdProperty.Name + 1);
                    });

                var entity = model.GetEntityType(typeof(Customer));

                Assert.Equal(1, entity.GetPrimaryKey().Properties.Count);
                Assert.Equal(Customer.IdProperty.Name + 1, entity.GetPrimaryKey().Properties.First().Name);
            }
コード例 #31
0
        public void Can_add_foreign_key_when_no_clr_type()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder
            .Entity <Customer>()
            .Key(c => c.Id);

            modelBuilder.Entity("Order", b =>
            {
                b.Property <int>("CustomerId");
                b.ForeignKeys(fks => fks.ForeignKey("Customer", "CustomerId"));
            });

            var entityType = model.GetEntityType(typeof(Order));

            Assert.Equal(1, entityType.ForeignKeys.Count());
        }
コード例 #32
0
        public void Can_add_multiple_indexes()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder
            .Entity <Customer>()
            .Indexes(ixs =>
            {
                ixs.Index(ix => ix.Id).IsUnique();
                ixs.Index(ix => ix.Name).Annotation("A1", "V1");
            });

            var entityType = model.GetEntityType(typeof(Customer));

            Assert.Equal(2, entityType.Indexes.Count());
            Assert.True(entityType.Indexes.First().IsUnique);
            Assert.False(entityType.Indexes.Last().IsUnique);
            Assert.Equal("V1", entityType.Indexes.Last()["A1"]);
        }
コード例 #33
0
        public void Can_set_entity_key_with_annotations_when_no_clr_type()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder.Entity("Customer", ps =>
            {
                ps.Property <int>("Id");
                ps.Property <string>("Name");
                ps.Key(k => k.Properties("Id", "Name")
                       .Annotation("A1", "V1")
                       .Annotation("A2", "V2"));
            });

            var entity = model.GetEntityType(typeof(Customer));

            Assert.Equal(2, entity.GetKey().Properties.Count());
            Assert.Equal(new[] { "Id", "Name" }, entity.GetKey().Properties.Select(p => p.Name));
            Assert.Equal("V1", entity.GetKey()["A1"]);
            Assert.Equal("V2", entity.GetKey()["A2"]);
        }
コード例 #34
0
        public void Can_add_multiple_foreign_keys()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder.Entity <Customer>().Key(c => c.Id);

            modelBuilder
            .Entity <Order>()
            .ForeignKeys(
                fks =>
            {
                fks.ForeignKey <Customer>(c => c.CustomerId);
                fks.ForeignKey <Customer>(c => c.CustomerId).IsUnique();
            });

            var entityType = model.GetEntityType(typeof(Order));

            Assert.Equal(2, entityType.ForeignKeys.Count());
            Assert.True(entityType.ForeignKeys.Last().IsUnique);
        }
コード例 #35
0
        public void Can_add_multiple_indexes_when_no_clr_type()
        {
            var model        = new Model();
            var modelBuilder = new ModelBuilder(model);

            modelBuilder.Entity("Customer", ps =>
            {
                ps.Property <int>("Id");
                ps.Property <string>("Name");
                ps.Indexes(ixs =>
                {
                    ixs.Index("Id").IsUnique();
                    ixs.Index("Name").Annotation("A1", "V1");
                });
            });

            var entityType = model.GetEntityType(typeof(Customer));

            Assert.Equal(2, entityType.Indexes.Count());
            Assert.True(entityType.Indexes.First().IsUnique);
            Assert.False(entityType.Indexes.Last().IsUnique);
            Assert.Equal("V1", entityType.Indexes.Last()["A1"]);
        }
コード例 #36
0
        private static IModel BuildModel(
            bool createProducts = true, bool createCategory = true,
            bool createFeaturedProductCategory = true, bool createFeaturedProduct = true)
        {
            var model = new Model();
            var builder = TestHelpers.Instance.CreateConventionBuilder(model);

            builder.Entity<Product>();
            builder.Entity<Category>();

            var categoryType = model.GetEntityType(typeof(Category));
            var productType = model.GetEntityType(typeof(Product));

            var categoryFk = productType.GetOrAddForeignKey(productType.GetProperty("CategoryId"), categoryType.GetPrimaryKey(), categoryType);
            var featuredProductFk = categoryType.GetOrAddForeignKey(categoryType.GetProperty("FeaturedProductId"), productType.GetPrimaryKey(), productType);
            featuredProductFk.IsUnique = true;

            if (createProducts)
            {
                categoryType.AddNavigation("Products", categoryFk, pointsToPrincipal: false);
            }
            if (createCategory)
            {
                productType.AddNavigation("Category", categoryFk, pointsToPrincipal: true);
            }

            if (createFeaturedProductCategory)
            {
                productType.AddNavigation("FeaturedProductCategory", featuredProductFk, pointsToPrincipal: false);
            }
            if (createFeaturedProduct)
            {
                categoryType.AddNavigation("FeaturedProduct", featuredProductFk, pointsToPrincipal: true);
            }

            return model;
        }
コード例 #37
0
            public virtual void Can_set_composite_entity_key_from_property_names_when_mixed_properties()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);
                modelBuilder.Ignore<CustomerDetails>();
                modelBuilder.Ignore<Order>();

                modelBuilder.Entity<Customer>(b =>
                    {
                        b.Property<string>(Customer.NameProperty.Name + "Shadow");
                        b.HasKey(Customer.IdProperty.Name, Customer.NameProperty.Name + "Shadow");
                    });

                var entity = model.GetEntityType(typeof(Customer));

                Assert.Equal(2, entity.GetPrimaryKey().Properties.Count);
                Assert.Equal(Customer.IdProperty.Name, entity.GetPrimaryKey().Properties.First().Name);
                Assert.Equal(Customer.NameProperty.Name + "Shadow", entity.GetPrimaryKey().Properties.Last().Name);
            }
コード例 #38
0
            public virtual void Can_set_composite_entity_key_from_clr_properties()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);

                modelBuilder
                    .Entity<Customer>()
                    .HasKey(e => new { e.Id, e.Name });

                var entity = model.GetEntityType(typeof(Customer));

                Assert.Equal(2, entity.GetPrimaryKey().Properties.Count);
                Assert.Equal(Customer.IdProperty.Name, entity.GetPrimaryKey().Properties.First().Name);
                Assert.Equal(Customer.NameProperty.Name, entity.GetPrimaryKey().Properties.Last().Name);
            }
コード例 #39
0
            public virtual void Can_add_multiple_indexes()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);

                var entityBuilder = modelBuilder.Entity<Customer>();
                var firstIndexBuilder = entityBuilder.Index(ix => ix.Id).Unique();
                var secondIndexBuilder = entityBuilder.Index(ix => ix.Name).Annotation("A1", "V1");

                var entityType = (IEntityType)model.GetEntityType(typeof(Customer));

                Assert.Equal(2, entityType.GetIndexes().Count());
                Assert.True(firstIndexBuilder.Metadata.IsUnique);
                Assert.False(((IIndex)secondIndexBuilder.Metadata).IsUnique);
                Assert.Equal("V1", secondIndexBuilder.Metadata["A1"]);
            }
コード例 #40
0
            public virtual void Can_add_index_when_no_clr_property()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);

                modelBuilder
                    .Entity<Customer>(b =>
                        {
                            b.Property<int>("Index");
                            b.Index("Index");
                        });

                var entityType = model.GetEntityType(typeof(Customer));

                var index = entityType.Indexes.Single();
                Assert.Equal("Index", index.Properties.Single().Name);
            }
コード例 #41
0
            public virtual void Can_add_index()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);

                modelBuilder
                    .Entity<Customer>()
                    .Index(ix => ix.Name);

                var entityType = model.GetEntityType(typeof(Customer));

                var index = entityType.Indexes.Single();
                Assert.Equal(Customer.NameProperty.Name, index.Properties.Single().Name);
            }
コード例 #42
0
            public virtual void Can_set_max_length_for_properties()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);

                modelBuilder.Entity<Quarks>(b =>
                    {
                        b.Property(e => e.Up).HasMaxLength(0);
                        b.Property(e => e.Down).HasMaxLength(100);
                        b.Property<int>("Charm").HasMaxLength(0);
                        b.Property<string>("Strange").HasMaxLength(100);
                        b.Property<int>("Top").HasMaxLength(0);
                        b.Property<string>("Bottom").HasMaxLength(100);
                    });

                var entityType = model.GetEntityType(typeof(Quarks));

                Assert.Null(entityType.GetProperty(Customer.IdProperty.Name).GetMaxLength());
                Assert.Equal(0, entityType.GetProperty("Up").GetMaxLength());
                Assert.Equal(100, entityType.GetProperty("Down").GetMaxLength());
                Assert.Equal(0, entityType.GetProperty("Charm").GetMaxLength());
                Assert.Equal(100, entityType.GetProperty("Strange").GetMaxLength());
                Assert.Equal(0, entityType.GetProperty("Top").GetMaxLength());
                Assert.Equal(100, entityType.GetProperty("Bottom").GetMaxLength());
            }
コード例 #43
0
            public virtual void Properties_can_be_set_to_be_store_computed()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);

                modelBuilder.Entity<Quarks>(b =>
                    {
                        b.HasKey(e => e.Id);
                        b.Property(e => e.Up).ValueGeneratedOnAddOrUpdate();
                        b.Property(e => e.Down).ValueGeneratedNever();
                        b.Property<int>("Charm").ValueGeneratedOnAdd();
                        b.Property<string>("Strange").ValueGeneratedNever();
                        b.Property<int>("Top").ValueGeneratedOnAddOrUpdate();
                        b.Property<string>("Bottom").ValueGeneratedNever();
                    });

                var entityType = model.GetEntityType(typeof(Quarks));

                Assert.Equal(ValueGenerated.OnAdd, entityType.GetProperty(Customer.IdProperty.Name).ValueGenerated);
                Assert.Equal(ValueGenerated.OnAddOrUpdate, entityType.GetProperty("Up").ValueGenerated);
                Assert.Equal(ValueGenerated.Never, entityType.GetProperty("Down").ValueGenerated);
                Assert.Equal(ValueGenerated.OnAdd, entityType.GetProperty("Charm").ValueGenerated);
                Assert.Equal(ValueGenerated.Never, entityType.GetProperty("Strange").ValueGenerated);
                Assert.Equal(ValueGenerated.OnAddOrUpdate, entityType.GetProperty("Top").ValueGenerated);
                Assert.Equal(ValueGenerated.Never, entityType.GetProperty("Bottom").ValueGenerated);
            }
コード例 #44
0
            public virtual void Properties_can_be_set_to_generate_values_on_Add()
            {
                var model = new Model();
                var modelBuilder = CreateModelBuilder(model);

                modelBuilder.Entity<Quarks>(b =>
                    {
                        b.Property(e => e.Id).Metadata.RequiresValueGenerator = false;
                        b.Property(e => e.Up).Metadata.RequiresValueGenerator = true;
                        b.Property(e => e.Down).Metadata.RequiresValueGenerator = true;
                        b.Property<int>("Charm").Metadata.RequiresValueGenerator = true;
                        b.Property<string>("Strange").Metadata.RequiresValueGenerator = false;
                        b.Property<int>("Top").Metadata.RequiresValueGenerator = true;
                        b.Property<string>("Bottom").Metadata.RequiresValueGenerator = false;
                    });

                var entityType = model.GetEntityType(typeof(Quarks));

                Assert.Equal(false, entityType.GetProperty(Customer.IdProperty.Name).RequiresValueGenerator);
                Assert.Equal(true, entityType.GetProperty("Up").RequiresValueGenerator);
                Assert.Equal(true, entityType.GetProperty("Down").RequiresValueGenerator);
                Assert.Equal(true, entityType.GetProperty("Charm").RequiresValueGenerator);
                Assert.Equal(false, entityType.GetProperty("Strange").RequiresValueGenerator);
                Assert.Equal(true, entityType.GetProperty("Top").RequiresValueGenerator);
                Assert.Equal(false, entityType.GetProperty("Bottom").RequiresValueGenerator);
            }