protected Model CreateModel()
        {
            var model = new Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder.Entity<MappingQueryTestBase.MappedCustomer>(e =>
                {
                    e.Key(c => c.CustomerID);
                    e.Property(c => c.CompanyName2).Metadata.Relational().Column = "Broken";
                    e.Metadata.Relational().Table = "Broken";
                    e.Metadata.Relational().Schema = "wrong";
                });

            modelBuilder.Entity<MappingQueryTestBase.MappedEmployee>(e =>
                {
                    e.Key(em => em.EmployeeID);
                    e.Property(em => em.City2).Metadata.Relational().Column = "City";
                    e.Metadata.Relational().Table = "Employees";
                    e.Metadata.Relational().Schema = "dbo";
                });

            modelBuilder.Entity<MappingQueryTestBase.MappedOrder>(e =>
                {
                    e.Key(o => o.OrderID);
                    e.Property(em => em.ShipVia2).Metadata.Relational().Column = "ShipVia";
                    e.Metadata.Relational().Table = "Orders";
                    e.Metadata.Relational().Schema = "dbo";
                });

            OnModelCreating(modelBuilder);

            return model;
        }
        public void Properties_specified_by_string_are_shadow_properties_unless_already_defined_as_CLR_properties()
        {
            var model        = new Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder.Entity <Quarks>(b =>
            {
                b.Property(e => e.Up);
                b.Property <int>("Charm");
                b.Property(typeof(int), "Top");
                b.Property <int>("Up");
                b.Property <string>("Gluon");
                b.Property(typeof(string), "Photon");
            });

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

            Assert.False(entityType.GetProperty("Up").IsShadowProperty);
            Assert.True(entityType.GetProperty("Charm").IsShadowProperty);
            Assert.True(entityType.GetProperty("Top").IsShadowProperty);
            Assert.True(entityType.GetProperty("Gluon").IsShadowProperty);
            Assert.True(entityType.GetProperty("Photon").IsShadowProperty);

            Assert.Equal(-1, entityType.GetProperty("Up").ShadowIndex);
            Assert.Equal(0, entityType.GetProperty("Charm").ShadowIndex);
            Assert.Equal(3, entityType.GetProperty("Top").ShadowIndex);
            Assert.Equal(1, entityType.GetProperty("Gluon").ShadowIndex);
            Assert.Equal(2, entityType.GetProperty("Photon").ShadowIndex);
        }
예제 #3
0
        public void Generate_entity_type_with_shadow_property()
        {
            var builder = new BasicModelBuilder();

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

            var stringBuilder = new IndentedStringBuilder();

            new CSharpModelCodeGenerator().Generate(builder.Model, stringBuilder);

            Assert.Equal(
                @"var builder = new BasicModelBuilder();

builder.Entity(""Microsoft.Data.Entity.Commands.Tests.Migrations.CSharpModelCodeGeneratorTest+Customer"", b =>
    {
        b.Property<int>(""Id"");
        b.Key(""Id"");
    });

return builder.Model;",
                stringBuilder.ToString());

            GenerateAndValidateCode(builder.Model);
        }
예제 #4
0
        public void Generate_outputs_property_value_generation_settings()
        {
            var builder = new BasicModelBuilder();

            builder.Entity <Customer>(b =>
            {
                b.Key(e => e.Id);
                b.Property(e => e.Id).GenerateValuesOnAdd();
            });

            var stringBuilder = new IndentedStringBuilder();

            new CSharpModelCodeGenerator().Generate(builder.Model, stringBuilder);

            Assert.Equal(
                @"var builder = new BasicModelBuilder();

builder.Entity(""Microsoft.Data.Entity.Commands.Tests.Migrations.CSharpModelCodeGeneratorTest+Customer"", b =>
    {
        b.Property<int>(""Id"")
            .GenerateValuesOnAdd();
        b.Key(""Id"");
    });

return builder.Model;",
                stringBuilder.ToString());
        }
예제 #5
0
        public void Generate_entity_type_with_composite_key()
        {
            var builder = new BasicModelBuilder();

            builder.Entity <Customer>(b =>
            {
                b.Property(e => e.Id);
                b.Property(e => e.Name);
                b.Key(e => new { e.Id, e.Name })
                .Annotation("A1", "V1")
                .Annotation("A2", "V2");
            });

            var stringBuilder = new IndentedStringBuilder();

            new CSharpModelCodeGenerator().Generate(builder.Model, stringBuilder);

            Assert.Equal(
                @"var builder = new BasicModelBuilder();

builder.Entity(""Microsoft.Data.Entity.Commands.Tests.Migrations.CSharpModelCodeGeneratorTest+Customer"", b =>
    {
        b.Property<int>(""Id"");
        b.Property<string>(""Name"");
        b.Key(""Id"", ""Name"")
            .Annotation(""A1"", ""V1"")
            .Annotation(""A2"", ""V2"");
    });

return builder.Model;",
                stringBuilder.ToString());

            GenerateAndValidateCode(builder.Model);
        }
예제 #6
0
 protected override void OnModelCreating(BasicModelBuilder modelBuilder)
 {
     modelBuilder.Entity <MappingQueryTestBase.MappedCustomer>(e =>
     {
         e.Property(c => c.CompanyName2).ForSqlServer(c => c.Column("CompanyName"));
         e.ForSqlServer(t => t.Table("Customers", "dbo"));
     });
 }
 protected override void OnModelCreating(BasicModelBuilder modelBuilder)
 {
     modelBuilder.Entity<MappingQueryTestBase.MappedCustomer>(e =>
         {
             e.Property(c => c.CompanyName2).Metadata.SqlServer().Column = "CompanyName";
             e.Metadata.SqlServer().Table = "Customers";
             e.Metadata.SqlServer().Schema = "dbo";
         });
 }
 protected override void OnModelCreating(BasicModelBuilder modelBuilder)
 {
     modelBuilder.Entity <MappingQueryTestBase.MappedCustomer>(e =>
     {
         e.Property(c => c.CompanyName2).Metadata.SqlServer().Column = "CompanyName";
         e.Metadata.SqlServer().Table  = "Customers";
         e.Metadata.SqlServer().Schema = "dbo";
     });
 }
        private IModel CreateModel()
        {
            var model   = new Model();
            var builder = new BasicModelBuilder(model);

            builder.Entity <Customer>().Property(s => s.CustomerID);

            return(model);
        }
예제 #10
0
        public void Visit_with_unsupported_table_subordinate_operation()
        {
            var modelBuilder = new BasicModelBuilder();

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

            var addForeignKeyOperation
                = new AddForeignKeyOperation("T2", "FK", new[] { "C" }, "T1", new[] { "Id" }, cascadeDelete: true);

            var operations = PreProcess(modelBuilder, addForeignKeyOperation);

            Assert.Equal(4, operations.Count);
            Assert.IsType <RenameTableOperation>(operations[0]);
            Assert.IsType <CreateTableOperation>(operations[1]);
            Assert.IsType <CopyDataOperation>(operations[2]);
            Assert.IsType <DropTableOperation>(operations[3]);

            var renameTableOperation = (RenameTableOperation)operations[0];

            Assert.Equal("T2", renameTableOperation.TableName);
            Assert.Equal("__mig_tmp__T2", renameTableOperation.NewTableName);

            var createTableOperation = (CreateTableOperation)operations[1];

            Assert.Equal("T2", createTableOperation.Table.Name);
            Assert.Equal(new[] { "Id", "C" }, createTableOperation.Table.Columns.Select(c => c.Name));
            Assert.Equal(new[] { typeof(int), typeof(int) }, createTableOperation.Table.Columns.Select(c => c.ClrType));
            Assert.Equal(1, createTableOperation.Table.ForeignKeys.Count);
            Assert.Equal("FK", createTableOperation.Table.ForeignKeys[0].Name);
            Assert.Equal("T1", createTableOperation.Table.ForeignKeys[0].ReferencedTable.Name);
            Assert.Equal(new[] { "C" }, createTableOperation.Table.ForeignKeys[0].Columns.Select(c => c.Name));
            Assert.Equal(new[] { "Id" }, createTableOperation.Table.ForeignKeys[0].ReferencedColumns.Select(c => c.Name));

            var copyDataOperation = (CopyDataOperation)operations[2];

            Assert.Equal("__mig_tmp__T2", copyDataOperation.SourceTableName);
            Assert.Equal(new[] { "Id", "C" }, copyDataOperation.SourceColumnNames);
            Assert.Equal("T2", copyDataOperation.TargetTableName);
            Assert.Equal(new[] { "Id", "C" }, copyDataOperation.TargetColumnNames);

            var dropTableOperation = (DropTableOperation)operations[3];

            Assert.Equal("__mig_tmp__T2", dropTableOperation.TableName);
        }
        public void Can_get_entity_builder_for_entity_type_name()
        {
            var model = new Model();
            var modelBuilder = new BasicModelBuilder(model);

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

            Assert.NotNull(entityBuilder);
            Assert.NotNull(model.FindEntityType(typeof(Customer).FullName));
        }
        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);
        }
예제 #13
0
        public void Can_set_entity_table_name_with_dot()
        {
            var model        = new Metadata.Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder
            .Entity <Customer>().ToTable("my.table");

            Assert.Equal("my.table", model.GetEntityType(typeof(Customer)).TableName());
        }
예제 #14
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);
        }
        private static Property CreateDefaultValueGenProperty <T>()
        {
            var property = new BasicModelBuilder()
                           .Entity <Robot>()
                           .Property <T>(typeof(T).Name)
                           .GenerateValuesOnAdd()
                           .Metadata;

            return(property);
        }
        private static Property CreateIdentityProperty <T>()
        {
            var property = new BasicModelBuilder()
                           .Entity <Robot>()
                           .Property <T>(typeof(T).Name)
                           .ForSqlServer(b => b.UseIdentity())
                           .Metadata;

            return(property);
        }
예제 #17
0
        public void Can_get_entity_builder_for_entity_type_name()
        {
            var model        = new Model();
            var modelBuilder = new BasicModelBuilder(model);

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

            Assert.NotNull(entityBuilder);
            Assert.NotNull(model.TryGetEntityType(typeof(Customer).FullName));
        }
        private static Property CreateModelSequenceProperty <T>()
        {
            var property = new BasicModelBuilder()
                           .ForSqlServer(b => b.UseSequence())
                           .Entity <Robot>()
                           .Property <T>(typeof(T).Name)
                           .GenerateValuesOnAdd()
                           .Metadata;

            return(property);
        }
        public void Visit_with_rename_operation_followed_by_unsupported_subordinate_operation()
        {
            var modelBuilder = new BasicModelBuilder();

            modelBuilder.Entity("T1",
                                b =>
            {
                b.Property <int>("Id");
                b.Key("Id");
            });
            modelBuilder.Entity("T2",
                                b =>
            {
                b.Property <int>("Id");
                b.Property <int>("C");
                b.Key("Id");
                // TODO: SQLite-specific. Issue #875
                b.ForRelational().Table("T", "dbo");
            });

            var moveTableOperation   = new MoveTableOperation("dbo.T", "dbo2");
            var renameTableOperation = new RenameTableOperation("dbo2.T", "T2");
            var addForeignKeyOperation
                = new AddForeignKeyOperation("dbo2.T2", "FK", new[] { "C" }, "T1", new[] { "Id" }, cascadeDelete: true);

            var operations = PreProcess(modelBuilder, moveTableOperation, renameTableOperation, addForeignKeyOperation);

            Assert.Equal(3, operations.Count);
            Assert.IsType <CreateTableOperation>(operations[0]);
            Assert.IsType <CopyDataOperation>(operations[1]);
            Assert.IsType <DropTableOperation>(operations[2]);

            var createTableOperation = (CreateTableOperation)operations[0];

            Assert.Equal("dbo2.T2", createTableOperation.Table.Name);
            Assert.Equal(new[] { "Id", "C" }, createTableOperation.Table.Columns.Select(c => c.Name));
            Assert.Equal(new[] { typeof(int), typeof(int) }, createTableOperation.Table.Columns.Select(c => c.ClrType));
            Assert.Equal(1, createTableOperation.Table.ForeignKeys.Count);
            Assert.Equal("FK", createTableOperation.Table.ForeignKeys[0].Name);
            Assert.Equal("T1", createTableOperation.Table.ForeignKeys[0].ReferencedTable.Name);
            Assert.Equal(new[] { "C" }, createTableOperation.Table.ForeignKeys[0].Columns.Select(c => c.Name));
            Assert.Equal(new[] { "Id" }, createTableOperation.Table.ForeignKeys[0].ReferencedColumns.Select(c => c.Name));

            var copyDataOperation = (CopyDataOperation)operations[1];

            Assert.Equal("dbo.T", copyDataOperation.SourceTableName);
            Assert.Equal(new[] { "Id", "C" }, copyDataOperation.SourceColumnNames);
            Assert.Equal("dbo2.T2", copyDataOperation.TargetTableName);
            Assert.Equal(new[] { "Id", "C" }, copyDataOperation.TargetColumnNames);

            var dropTableOperation = (DropTableOperation)operations[2];

            Assert.Equal("dbo.T", dropTableOperation.TableName);
        }
예제 #20
0
        public void Can_set_entity_table_name_when_no_clr_type()
        {
            var model        = new Metadata.Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder
            .Entity(typeof(Customer).FullName)
            .ToTable("foo");

            Assert.Equal("foo", model.GetEntityType(typeof(Customer)).TableName());
        }
예제 #21
0
        public void Property_column_name_defaults_to_name()
        {
            var model        = new Metadata.Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder
            .Entity(typeof(Customer).FullName)
            .Property <string>("Name");

            Assert.Equal("Name", model.GetEntityType(typeof(Customer)).GetProperty("Name").ColumnName());
        }
예제 #22
0
        public void Can_create_default_sequence_with_basic_builder_using_nested_closure()
        {
            var modelBuilder = new BasicModelBuilder();

            modelBuilder
            .ForRelational(b => { b.Sequence(); });

            var sequence = modelBuilder.Model.Relational().TryGetSequence(Sequence.DefaultName);

            ValidateDefaultSequence(sequence);
        }
예제 #23
0
        public void Can_set_property_annotation()
        {
            var model        = new Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder
            .Entity <Customer>()
            .Property(c => c.Name).Annotation("foo", "bar");

            Assert.Equal("bar", model.GetEntityType(typeof(Customer)).GetProperty("Name")["foo"]);
        }
예제 #24
0
        public void Can_set_property_column_name_when_no_clr_property()
        {
            var model        = new Metadata.Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder
            .Entity <Customer>()
            .Property <string>("Name").ColumnName("foo");

            Assert.Equal("foo", model.GetEntityType(typeof(Customer)).GetProperty("Name").ColumnName());
        }
예제 #25
0
        public void Can_create_schema_named_sequence_with_basic_builder_using_nested_closure()
        {
            var modelBuilder = new BasicModelBuilder();

            modelBuilder
            .ForRelational(b => { b.Sequence("Snook", "Tasty"); });

            var sequence = modelBuilder.Model.Relational().TryGetSequence("Snook", "Tasty");

            ValidateSchemaNamedSequence(sequence);
        }
예제 #26
0
        public void Can_set_property_annotation_when_no_clr_type()
        {
            var model        = new Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder
            .Entity(typeof(Customer).FullName)
            .Property <string>("Name").Annotation("foo", "bar");

            Assert.Equal("bar", model.GetEntityType(typeof(Customer)).GetProperty("Name")["foo"]);
        }
예제 #27
0
        public void Can_set_entity_table_name_and_schema()
        {
            var model        = new Metadata.Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder
            .Entity <Customer>().ToTable("foo", "schema");

            Assert.Equal("foo", model.GetEntityType(typeof(Customer)).TableName());
            Assert.Equal("schema", model.GetEntityType(typeof(Customer)).Schema());
        }
예제 #28
0
        public void Can_create_named_sequence_with_basic_builder()
        {
            var modelBuilder = new BasicModelBuilder();

            modelBuilder
            .ForRelational()
            .Sequence("Snook");

            var sequence = modelBuilder.Model.Relational().TryGetSequence("Snook");

            ValidateNamedSequence(sequence);
        }
        public void Can_set_entity_key_from_clr_property()
        {
            var model = new Model();
            var modelBuilder = new BasicModelBuilder(model);

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

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

            Assert.Equal(1, entity.GetPrimaryKey().Properties.Count());
            Assert.Equal("Id", entity.GetPrimaryKey().Properties.First().Name);
        }
예제 #30
0
        public void Can_set_entity_key_from_clr_property()
        {
            var model        = new Model();
            var modelBuilder = new BasicModelBuilder(model);

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

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

            Assert.Equal(1, entity.GetPrimaryKey().Properties.Count());
            Assert.Equal("Id", entity.GetPrimaryKey().Properties.First().Name);
        }
예제 #31
0
        public void Throws_if_existing_property_is_not_DateTimeOffset()
        {
            var modelBuilder = new BasicModelBuilder();

            Assert.Equal(
                Strings.FormatBadTimestampType("Name", "Customer", "String"),
                Assert.Throws <InvalidOperationException>(
                    () => modelBuilder
                    .Entity <Customer>()
                    .ForAzureTableStorage()
                    .Timestamp(e => e.Name)).Message);
        }
        private static IModel CreateModel()
        {
            var model        = new Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder.Entity <Test>(b =>
            {
                b.Key(c => c.Id);
                b.Property(c => c.Name);
            });

            return(model);
        }
예제 #33
0
        public void Can_add_index()
        {
            var model        = new Model();
            var modelBuilder = new BasicModelBuilder(model);

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

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

            Assert.Equal(1, entityType.Indexes.Count());
        }
예제 #34
0
        public void Can_set_table_name_with_basic_builder_using_nested_closure_non_generic()
        {
            var modelBuilder = new BasicModelBuilder();

            modelBuilder
            .Entity(typeof(Customer))
            .ForAzureTableStorage(b => b.Table("Customizer"));

            var entityType = modelBuilder.Model.GetEntityType(typeof(Customer));

            Assert.Equal("Customer", entityType.SimpleName);
            Assert.Equal("Customizer", entityType.AzureTableStorage().Table);
        }
예제 #35
0
        public void Can_add_multiple_properties_when_no_clr_type()
        {
            var model        = new Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder.Entity(typeof(Customer).FullName, b =>
            {
                b.Property <int>("Id");
                b.Property <string>("Name").Annotation("foo", "bar");
            });

            Assert.Equal(2, model.GetEntityType(typeof(Customer)).Properties.Count());
        }
        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);
        }
        public void Can_get_and_set_schema_name()
        {
            var modelBuilder = new BasicModelBuilder();

            var entityType = modelBuilder
                .Entity<Customer>()
                .Metadata;

            Assert.Null(entityType.Relational().Schema);
            Assert.Null(((IEntityType)entityType).Relational().Schema);

            entityType.Relational().Schema = "db0";

            Assert.Equal("db0", entityType.Relational().Schema);
            Assert.Equal("db0", ((IEntityType)entityType).Relational().Schema);

            entityType.Relational().Schema = null;

            Assert.Null(entityType.Relational().Schema);
            Assert.Null(((IEntityType)entityType).Relational().Schema);
        }
        public void Can_get_and_set_column_name()
        {
            var modelBuilder = new BasicModelBuilder();

            var property = modelBuilder
                .Entity<Customer>()
                .Property(e => e.Name)
                .Metadata;

            Assert.Equal("Name", property.SqlServer().Column);
            Assert.Equal("Name", ((IProperty)property).SqlServer().Column);

            property.Relational().Column = "Eman";

            Assert.Equal("Name", property.Name);
            Assert.Equal("Name", ((IProperty)property).Name);
            Assert.Equal("Eman", property.Relational().Column);
            Assert.Equal("Eman", ((IProperty)property).Relational().Column);
            Assert.Equal("Eman", property.SqlServer().Column);
            Assert.Equal("Eman", ((IProperty)property).SqlServer().Column);

            property.SqlServer().Column = "MyNameIs";

            Assert.Equal("Name", property.Name);
            Assert.Equal("Name", ((IProperty)property).Name);
            Assert.Equal("Eman", property.Relational().Column);
            Assert.Equal("Eman", ((IProperty)property).Relational().Column);
            Assert.Equal("MyNameIs", property.SqlServer().Column);
            Assert.Equal("MyNameIs", ((IProperty)property).SqlServer().Column);

            property.SqlServer().Column = null;

            Assert.Equal("Name", property.Name);
            Assert.Equal("Name", ((IProperty)property).Name);
            Assert.Equal("Eman", property.Relational().Column);
            Assert.Equal("Eman", ((IProperty)property).Relational().Column);
            Assert.Equal("Eman", property.SqlServer().Column);
            Assert.Equal("Eman", ((IProperty)property).SqlServer().Column);
        }
        public void Can_get_and_set_table_name()
        {
            var modelBuilder = new BasicModelBuilder();

            var entityType = modelBuilder
                .Entity<Customer>()
                .Metadata;

            Assert.Equal("Customer", entityType.SqlServer().Table);
            Assert.Equal("Customer", ((IEntityType)entityType).SqlServer().Table);

            entityType.Relational().Table = "Customizer";

            Assert.Equal("Customer", entityType.DisplayName());
            Assert.Equal("Customer", ((IEntityType)entityType).DisplayName());
            Assert.Equal("Customizer", entityType.Relational().Table);
            Assert.Equal("Customizer", ((IEntityType)entityType).Relational().Table);
            Assert.Equal("Customizer", entityType.SqlServer().Table);
            Assert.Equal("Customizer", ((IEntityType)entityType).SqlServer().Table);

            entityType.SqlServer().Table = "Custardizer";

            Assert.Equal("Customer", entityType.DisplayName());
            Assert.Equal("Customer", ((IEntityType)entityType).DisplayName());
            Assert.Equal("Customizer", entityType.Relational().Table);
            Assert.Equal("Customizer", ((IEntityType)entityType).Relational().Table);
            Assert.Equal("Custardizer", entityType.SqlServer().Table);
            Assert.Equal("Custardizer", ((IEntityType)entityType).SqlServer().Table);

            entityType.SqlServer().Table = null;

            Assert.Equal("Customer", entityType.DisplayName());
            Assert.Equal("Customer", ((IEntityType)entityType).DisplayName());
            Assert.Equal("Customizer", entityType.Relational().Table);
            Assert.Equal("Customizer", ((IEntityType)entityType).Relational().Table);
            Assert.Equal("Customizer", entityType.SqlServer().Table);
            Assert.Equal("Customizer", ((IEntityType)entityType).SqlServer().Table);
        }
        public void Can_get_and_set_value_generation_on_model()
        {
            var modelBuilder = new BasicModelBuilder();
            var model = modelBuilder.Metadata;

            Assert.Null(model.SqlServer().ValueGenerationStrategy);
            Assert.Null(((IModel)model).SqlServer().ValueGenerationStrategy);

            model.SqlServer().ValueGenerationStrategy = SqlServerValueGenerationStrategy.Sequence;

            Assert.Equal(SqlServerValueGenerationStrategy.Sequence, model.SqlServer().ValueGenerationStrategy);
            Assert.Equal(SqlServerValueGenerationStrategy.Sequence, ((IModel)model).SqlServer().ValueGenerationStrategy);

            model.SqlServer().ValueGenerationStrategy = null;

            Assert.Null(model.SqlServer().ValueGenerationStrategy);
            Assert.Null(((IModel)model).SqlServer().ValueGenerationStrategy);
        }
        public void Can_get_and_set_default_sequence_schema_on_model()
        {
            var modelBuilder = new BasicModelBuilder();
            var model = modelBuilder.Metadata;

            Assert.Null(model.SqlServer().DefaultSequenceSchema);
            Assert.Null(((IModel)model).SqlServer().DefaultSequenceSchema);

            model.SqlServer().DefaultSequenceSchema = "Tasty.Snook";

            Assert.Equal("Tasty.Snook", model.SqlServer().DefaultSequenceSchema);
            Assert.Equal("Tasty.Snook", ((IModel)model).SqlServer().DefaultSequenceSchema);

            model.SqlServer().DefaultSequenceSchema = null;

            Assert.Null(model.SqlServer().DefaultSequenceSchema);
            Assert.Null(((IModel)model).SqlServer().DefaultSequenceSchema);
        }
        public void TryGetSequence_returns_sequence_property_is_marked_for_sequence_generation()
        {
            var modelBuilder = new BasicModelBuilder();

            var property = modelBuilder
                .Entity<Customer>()
                .Property(e => e.Id)
                .Metadata;

            modelBuilder.Model.SqlServer().AddOrReplaceSequence(new Sequence("DaneelOlivaw"));
            property.SqlServer().SequenceName = "DaneelOlivaw";
            property.SqlServer().ValueGenerationStrategy = SqlServerValueGenerationStrategy.Sequence;

            Assert.Equal("DaneelOlivaw", property.SqlServer().TryGetSequence().Name);
            Assert.Equal("DaneelOlivaw", ((IProperty)property).SqlServer().TryGetSequence().Name);
        }
        public void TryGetSequence_returns_null_if_property_is_not_configured_for_sequence_value_generation()
        {
            var modelBuilder = new BasicModelBuilder();

            var property = modelBuilder
                .Entity<Customer>()
                .Property(e => e.Id)
                .Metadata;

            modelBuilder.Model.SqlServer().AddOrReplaceSequence(new Sequence("DaneelOlivaw"));

            Assert.Null(property.SqlServer().TryGetSequence());
            Assert.Null(((IProperty)property).SqlServer().TryGetSequence());

            property.SqlServer().SequenceName = "DaneelOlivaw";

            Assert.Null(property.SqlServer().TryGetSequence());
            Assert.Null(((IProperty)property).SqlServer().TryGetSequence());

            modelBuilder.Model.SqlServer().ValueGenerationStrategy = SqlServerValueGenerationStrategy.Identity;

            Assert.Null(property.SqlServer().TryGetSequence());
            Assert.Null(((IProperty)property).SqlServer().TryGetSequence());

            modelBuilder.Model.SqlServer().ValueGenerationStrategy = null;
            property.SqlServer().ValueGenerationStrategy = SqlServerValueGenerationStrategy.Identity;

            Assert.Null(property.SqlServer().TryGetSequence());
            Assert.Null(((IProperty)property).SqlServer().TryGetSequence());
        }
        public void Can_get_and_set_key_clustering()
        {
            var modelBuilder = new BasicModelBuilder();

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

            Assert.Null(key.SqlServer().IsClustered);
            Assert.Null(((IKey)key).SqlServer().IsClustered);

            key.SqlServer().IsClustered = true;

            Assert.True(key.SqlServer().IsClustered.Value);
            Assert.True(((IKey)key).SqlServer().IsClustered.Value);

            key.SqlServer().IsClustered = null;

            Assert.Null(key.SqlServer().IsClustered);
            Assert.Null(((IKey)key).SqlServer().IsClustered);
        }
 protected virtual void OnModelCreating(BasicModelBuilder modelBuilder)
 {
 }
        public void Can_get_multiple_sequences_when_overridden()
        {
            var modelBuilder = new BasicModelBuilder();
            var model = modelBuilder.Metadata;

            model.Relational().AddOrReplaceSequence(new Sequence("Fibonacci", startValue: 1));
            model.SqlServer().AddOrReplaceSequence(new Sequence("Fibonacci", startValue: 3));
            model.SqlServer().AddOrReplaceSequence(new Sequence("Golomb"));

            var sequences = model.SqlServer().Sequences;

            Assert.Equal(2, sequences.Count);
            Assert.Contains(sequences, s => s.Name == "Golomb");

            var sequence = sequences.FirstOrDefault(s => s.Name == "Fibonacci");
            Assert.NotNull(sequence);
            Assert.Equal(3, sequence.StartValue);
        }
        public void Throws_setting_identity_generation_for_nullable_byte_property()
        {
            var modelBuilder = new BasicModelBuilder();

            var property = modelBuilder
                .Entity<Customer>()
                .Property(e => e.NullableByte)
                .Metadata;

            Assert.Equal(
                Strings.IdentityBadType("NullableByte", typeof(Customer).FullName, "Nullable`1"),
                Assert.Throws<ArgumentException>(
                    () => property.SqlServer().ValueGenerationStrategy = SqlServerValueGenerationStrategy.Identity).Message);
        }
        public void Can_get_and_set_sequence_name_on_property()
        {
            var modelBuilder = new BasicModelBuilder();

            var property = modelBuilder
                .Entity<Customer>()
                .Property(e => e.Id)
                .Metadata;

            Assert.Null(property.SqlServer().SequenceName);
            Assert.Null(((IProperty)property).SqlServer().SequenceName);

            property.SqlServer().SequenceName = "Snook";

            Assert.Equal("Snook", property.SqlServer().SequenceName);
            Assert.Equal("Snook", ((IProperty)property).SqlServer().SequenceName);

            property.SqlServer().SequenceName = null;

            Assert.Null(property.SqlServer().SequenceName);
            Assert.Null(((IProperty)property).SqlServer().SequenceName);
        }
        public void Can_get_and_set_sequence_schema_on_property()
        {
            var modelBuilder = new BasicModelBuilder();

            var property = modelBuilder
                .Entity<Customer>()
                .Property(e => e.Id)
                .Metadata;

            Assert.Null(property.SqlServer().SequenceSchema);
            Assert.Null(((IProperty)property).SqlServer().SequenceSchema);

            property.SqlServer().SequenceSchema = "Tasty";

            Assert.Equal("Tasty", property.SqlServer().SequenceSchema);
            Assert.Equal("Tasty", ((IProperty)property).SqlServer().SequenceSchema);

            property.SqlServer().SequenceSchema = null;

            Assert.Null(property.SqlServer().SequenceSchema);
            Assert.Null(((IProperty)property).SqlServer().SequenceSchema);
        }
        private static IModel CreateCyclicFKModel()
        {
            var model = new Entity.Metadata.Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder.Entity<FakeEntity>(b =>
                {
                    b.Key(c => c.Id);
                    b.Property(c => c.Value);
                });

            modelBuilder.Entity<RelatedFakeEntity>(b =>
                {
                    b.Key(c => c.Id);
                    b.ForeignKey<FakeEntity>(c => c.RelatedId);
                });

            modelBuilder
                .Entity<FakeEntity>()
                .ForeignKey<RelatedFakeEntity>(c => c.RelatedId);

            return model;
        }
        private static IModel CreateModel()
        {
            var model = new Model();
            var modelBuilder = new BasicModelBuilder(model);

            modelBuilder.Entity<Test>(b =>
                {
                    b.Key(c => c.Id);
                    b.Property(c => c.Name);
                });

            return model;
        }
        public void Can_add_and_replace_sequence_with_schema_name()
        {
            var modelBuilder = new BasicModelBuilder();
            var model = modelBuilder.Metadata;

            model.SqlServer().AddOrReplaceSequence(new Sequence("Foo", "Smoo"));

            Assert.Null(model.Relational().TryGetSequence("Foo", "Smoo"));
            Assert.Null(((IModel)model).Relational().TryGetSequence("Foo", "Smoo"));
            Assert.Equal("Foo", model.SqlServer().TryGetSequence("Foo", "Smoo").Name);
            Assert.Equal("Foo", ((IModel)model).SqlServer().TryGetSequence("Foo", "Smoo").Name);

            var sequence = model.SqlServer().TryGetSequence("Foo", "Smoo");

            Assert.Equal("Foo", sequence.Name);
            Assert.Equal("Smoo", sequence.Schema);
            Assert.Equal(10, sequence.IncrementBy);
            Assert.Equal(1, sequence.StartValue);
            Assert.Null(sequence.MinValue);
            Assert.Null(sequence.MaxValue);
            Assert.Same(typeof(long), sequence.Type);

            model.SqlServer().AddOrReplaceSequence(new Sequence("Foo", "Smoo", 1729, 11, 2001, 2010, typeof(int)));

            Assert.Null(model.Relational().TryGetSequence("Foo", "Smoo"));

            sequence = model.SqlServer().TryGetSequence("Foo", "Smoo");

            Assert.Equal("Foo", sequence.Name);
            Assert.Equal("Smoo", sequence.Schema);
            Assert.Equal(11, sequence.IncrementBy);
            Assert.Equal(1729, sequence.StartValue);
            Assert.Equal(2001, sequence.MinValue);
            Assert.Equal(2010, sequence.MaxValue);
            Assert.Same(typeof(int), sequence.Type);
        }
예제 #53
0
        private static IModel BuildModel()
        {
            var model = new Model();
            var builder = new BasicModelBuilder(model);

            builder.Annotation("ModelAnnotation1", "ModelValue1");
            builder.Annotation("ModelAnnotation2", "ModelValue2");

            var entityType1 = model.AddEntityType(typeof(KoolEntity1));
            var property = entityType1.GetOrAddProperty("Id1", typeof(int));
            entityType1.GetOrSetPrimaryKey(property);
            entityType1.GetOrAddProperty("Id2", typeof(Guid));
            entityType1.GetOrAddProperty("KoolEntity2Id", typeof(int));

            var entityType2 = model.AddEntityType(typeof(KoolEntity2));
            entityType2.GetOrAddProperty("KoolEntity1Id1", typeof(int));
            entityType2.GetOrAddProperty("KoolEntity1Id2", typeof(Guid));
            entityType2.GetOrAddProperty("KoolEntity3Id", typeof(int));

            var entityType3 = model.AddEntityType(typeof(KoolEntity3));
            entityType3.GetOrAddProperty("KoolEntity4Id", typeof(int));

            var entityType4 = model.AddEntityType(typeof(KoolEntity4));

            var entityType5 = model.AddEntityType(typeof(KoolEntity5));

            var entityType6 = model.AddEntityType(typeof(KoolEntity6));
            entityType6.GetOrAddProperty("Kool5Id", typeof(int));

            for (var i = 7; i <= 20; i++)
            {
                var type = Type.GetType("Microsoft.Data.Entity.FunctionalTests.Metadata.KoolEntity" + i);

                Assert.NotNull(type);

                model.AddEntityType(type);
            }

            for (var i = 2; i <= 20; i++)
            {
                var type = Type.GetType("Microsoft.Data.Entity.FunctionalTests.Metadata.KoolEntity" + i);

                var entityType = model.GetEntityType(type);
                var id = entityType.GetOrAddProperty(entityType.ClrType.GetProperty("Id"));
                entityType.GetOrSetPrimaryKey(id);
            }

            for (var i = 1; i <= 20; i++)
            {
                var type = Type.GetType("Microsoft.Data.Entity.FunctionalTests.Metadata.KoolEntity" + i);

                var entityType = model.GetEntityType(type);

                entityType["Annotation1"] = "Value1";
                entityType["Annotation2"] = "Value2";

                var foo = entityType.GetOrAddProperty(entityType.ClrType.GetProperty("Foo" + i));

                foo["Foo" + i + "Annotation1"] = "Foo" + i + "Value1";
                foo["Foo" + i + "Annotation2"] = "Foo" + i + "Value2";

                var goo = entityType.GetOrAddProperty(entityType.ClrType.GetProperty("Goo" + i));
            }

            var fk11 = entityType1.GetOrAddForeignKey(new[] { entityType1.GetProperty("KoolEntity2Id") }, entityType2.GetPrimaryKey());
            var fk21 = entityType2.GetOrAddForeignKey(new[] { entityType2.GetProperty("KoolEntity1Id1") }, entityType1.GetPrimaryKey());
            var fk22 = entityType2.GetOrAddForeignKey(new[] { entityType2.GetProperty("KoolEntity3Id") }, entityType3.GetPrimaryKey());
            var fk31 = entityType3.GetOrAddForeignKey(new[] { entityType3.GetProperty("KoolEntity4Id") }, entityType4.GetPrimaryKey());
            var fk61 = entityType6.GetOrAddForeignKey(new[] { entityType6.GetProperty("Kool5Id") }, entityType5.GetPrimaryKey());

            entityType1.AddNavigation("NavTo2", fk11, pointsToPrincipal: true);
            entityType1.AddNavigation("NavTo2s", fk21, pointsToPrincipal: false);
            entityType2.AddNavigation("NavTo1", fk21, pointsToPrincipal: true);
            entityType2.AddNavigation("NavTo1s", fk11, pointsToPrincipal: false);
            entityType2.AddNavigation("NavTo3", fk22, pointsToPrincipal: true);
            entityType3.AddNavigation("NavTo2s", fk22, pointsToPrincipal: false);
            entityType3.AddNavigation("NavTo4", fk31, pointsToPrincipal: true);
            entityType4.AddNavigation("NavTo3s", fk31, pointsToPrincipal: false);
            entityType5.AddNavigation("Kool6s", fk61, pointsToPrincipal: false);
            entityType6.AddNavigation("Kool5", fk61, pointsToPrincipal: true);

            return model;
        }
        public void TryGetSequence_with_schema_returns_sequence_model_is_marked_for_sequence_generation_and_model_has_name()
        {
            var modelBuilder = new BasicModelBuilder();

            var property = modelBuilder
                .Entity<Customer>()
                .Property(e => e.Id)
                .Metadata;

            modelBuilder.Model.SqlServer().AddOrReplaceSequence(new Sequence("DaneelOlivaw", "R"));
            modelBuilder.Model.SqlServer().ValueGenerationStrategy = SqlServerValueGenerationStrategy.Sequence;
            modelBuilder.Model.SqlServer().DefaultSequenceName = "DaneelOlivaw";
            modelBuilder.Model.SqlServer().DefaultSequenceSchema = "R";
            property.SqlServer().ValueGenerationStrategy = SqlServerValueGenerationStrategy.Default;

            Assert.Equal("DaneelOlivaw", property.SqlServer().TryGetSequence().Name);
            Assert.Equal("DaneelOlivaw", ((IProperty)property).SqlServer().TryGetSequence().Name);
            Assert.Equal("R", property.SqlServer().TryGetSequence().Schema);
            Assert.Equal("R", ((IProperty)property).SqlServer().TryGetSequence().Schema);
        }
        public void Throws_setting_sequence_generation_for_invalid_type()
        {
            var modelBuilder = new BasicModelBuilder();

            var property = modelBuilder
                .Entity<Customer>()
                .Property(e => e.Name)
                .Metadata;

            Assert.Equal(
                Strings.SequenceBadType("Name", typeof(Customer).FullName, "String"),
                Assert.Throws<ArgumentException>(
                    () => property.SqlServer().ValueGenerationStrategy = SqlServerValueGenerationStrategy.Sequence).Message);
        }
        public void Can_get_and_set_column_foreign_key_name()
        {
            var modelBuilder = new BasicModelBuilder();

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

            var foreignKey = modelBuilder
                .Entity<Order>()
                .ForeignKey<Customer>(e => e.CustomerId)
                .Metadata;

            Assert.Null(foreignKey.Relational().Name);
            Assert.Null(((IForeignKey)foreignKey).Relational().Name);
            Assert.Null(foreignKey.SqlServer().Name);
            Assert.Null(((IForeignKey)foreignKey).SqlServer().Name);

            foreignKey.Relational().Name = "FK";

            Assert.Equal("FK", foreignKey.Relational().Name);
            Assert.Equal("FK", ((IForeignKey)foreignKey).Relational().Name);
            Assert.Equal("FK", foreignKey.SqlServer().Name);
            Assert.Equal("FK", ((IForeignKey)foreignKey).SqlServer().Name);

            foreignKey.SqlServer().Name = "KFC";

            Assert.Equal("FK", foreignKey.Relational().Name);
            Assert.Equal("FK", ((IForeignKey)foreignKey).Relational().Name);
            Assert.Equal("KFC", foreignKey.SqlServer().Name);
            Assert.Equal("KFC", ((IForeignKey)foreignKey).SqlServer().Name);

            foreignKey.SqlServer().Name = null;

            Assert.Equal("FK", foreignKey.Relational().Name);
            Assert.Equal("FK", ((IForeignKey)foreignKey).Relational().Name);
            Assert.Equal("FK", foreignKey.SqlServer().Name);
            Assert.Equal("FK", ((IForeignKey)foreignKey).SqlServer().Name);
        }
        public void Can_get_multiple_sequences()
        {
            var modelBuilder = new BasicModelBuilder();
            var model = modelBuilder.Metadata;

            model.Relational().AddOrReplaceSequence(new Sequence("Fibonacci"));
            model.SqlServer().AddOrReplaceSequence(new Sequence("Golomb"));

            var sequences = model.SqlServer().Sequences;

            Assert.Equal(2, sequences.Count);
            Assert.Contains(sequences, s => s.Name == "Fibonacci");
            Assert.Contains(sequences, s => s.Name == "Golomb");
        }
        public void Can_get_and_set_value_generation_on_nullable_property()
        {
            var modelBuilder = new BasicModelBuilder();

            var property = modelBuilder
                .Entity<Customer>()
                .Property(e => e.NullableInt)
                .Metadata;

            Assert.Null(property.SqlServer().ValueGenerationStrategy);
            Assert.Null(((IProperty)property).SqlServer().ValueGenerationStrategy);
            Assert.Null(property.GenerateValueOnAdd);
            Assert.False(((IProperty)property).IsValueGeneratedOnAdd);

            property.SqlServer().ValueGenerationStrategy = SqlServerValueGenerationStrategy.Sequence;

            Assert.Equal(SqlServerValueGenerationStrategy.Sequence, property.SqlServer().ValueGenerationStrategy);
            Assert.Equal(SqlServerValueGenerationStrategy.Sequence, ((IProperty)property).SqlServer().ValueGenerationStrategy);
            Assert.Equal(true, property.GenerateValueOnAdd);

            property.SqlServer().ValueGenerationStrategy = null;

            Assert.Null(property.SqlServer().ValueGenerationStrategy);
            Assert.Null(((IProperty)property).SqlServer().ValueGenerationStrategy);
            Assert.Null(property.GenerateValueOnAdd);
        }
        public void Can_get_and_set_index_clustering()
        {
            var modelBuilder = new BasicModelBuilder();

            var index = modelBuilder
                .Entity<Customer>()
                .Index(e => e.Id)
                .Metadata;

            Assert.Null(index.SqlServer().IsClustered);
            Assert.Null(((IIndex)index).SqlServer().IsClustered);

            index.SqlServer().IsClustered = true;

            Assert.True(index.SqlServer().IsClustered.Value);
            Assert.True(((IIndex)index).SqlServer().IsClustered.Value);

            index.SqlServer().IsClustered = null;

            Assert.Null(index.SqlServer().IsClustered);
            Assert.Null(((IIndex)index).SqlServer().IsClustered);
        }
        public void Can_get_and_set_index_name()
        {
            var modelBuilder = new BasicModelBuilder();

            var index = modelBuilder
                .Entity<Customer>()
                .Index(e => e.Id)
                .Metadata;

            Assert.Null(index.Relational().Name);
            Assert.Null(((IIndex)index).Relational().Name);
            Assert.Null(index.SqlServer().Name);
            Assert.Null(((IIndex)index).SqlServer().Name);

            index.Relational().Name = "MyIndex";

            Assert.Equal("MyIndex", index.Relational().Name);
            Assert.Equal("MyIndex", ((IIndex)index).Relational().Name);
            Assert.Equal("MyIndex", index.SqlServer().Name);
            Assert.Equal("MyIndex", ((IIndex)index).SqlServer().Name);

            index.SqlServer().Name = "DexKnows";

            Assert.Equal("MyIndex", index.Relational().Name);
            Assert.Equal("MyIndex", ((IIndex)index).Relational().Name);
            Assert.Equal("DexKnows", index.SqlServer().Name);
            Assert.Equal("DexKnows", ((IIndex)index).SqlServer().Name);

            index.SqlServer().Name = null;

            Assert.Equal("MyIndex", index.Relational().Name);
            Assert.Equal("MyIndex", ((IIndex)index).Relational().Name);
            Assert.Equal("MyIndex", index.SqlServer().Name);
            Assert.Equal("MyIndex", ((IIndex)index).SqlServer().Name);
        }