Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

263 lines
9.5 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace System.Data.Entity.Migrations
{
using System.Data.Entity.Migrations.Design;
using System.Data.Entity.Migrations.History;
using System.Data.Entity.Migrations.Infrastructure;
using Xunit;
[Variant(DatabaseProvider.SqlClient, ProgrammingLanguage.CSharp)]
[Variant(DatabaseProvider.SqlServerCe, ProgrammingLanguage.CSharp)]
[Variant(DatabaseProvider.SqlClient, ProgrammingLanguage.VB)]
public class SchemaScenarios : DbTestCase
{
private class CustomSchemaContext_v1 : ShopContext_v1
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasDefaultSchema("foo");
}
}
private class CustomSchemaContext_v1b : CustomSchemaContext_v1
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MigrationsCustomer>().ToTable("tbl_customers", "crm");
}
}
private class CustomSchemaContext_v2 : ShopContext_v1
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasDefaultSchema("bar");
}
}
[MigrationsTheory]
public void Can_generate_and_update_when_custom_default_schemas()
{
ResetDatabase();
var migrator = CreateMigrator<ShopContext_v1>();
var generatedMigration0 = new MigrationScaffolder(migrator.Configuration).Scaffold("Migration_v0");
migrator = CreateMigrator<ShopContext_v1>(false, scaffoldedMigrations: generatedMigration0);
migrator.Update();
Assert.True(TableExists("dbo.OrderLines"));
Assert.True(TableExists("ordering.Orders"));
Assert.True(TableExists("dbo." + HistoryContext.TableName));
migrator = CreateMigrator<CustomSchemaContext_v1>();
var generatedMigration1 = new MigrationScaffolder(migrator.Configuration).Scaffold("Migration_v1");
migrator = CreateMigrator<CustomSchemaContext_v1>(
false, scaffoldedMigrations: new[] { generatedMigration0, generatedMigration1 });
migrator.Update();
WhenNotSqlCe(
() =>
{
Assert.False(TableExists("dbo.OrderLines"));
Assert.False(TableExists("dbo." + HistoryContext.TableName));
});
Assert.True(TableExists("foo.OrderLines"));
Assert.True(TableExists("ordering.Orders"));
Assert.True(TableExists("foo." + HistoryContext.TableName));
migrator = CreateMigrator<CustomSchemaContext_v2>(scaffoldedMigrations: generatedMigration1);
var generatedMigration2 = new MigrationScaffolder(migrator.Configuration).Scaffold("Migration_v2");
migrator
= CreateMigrator<CustomSchemaContext_v2>(
false, scaffoldedMigrations: new[] { generatedMigration0, generatedMigration1, generatedMigration2 });
migrator.Update();
WhenNotSqlCe(
() =>
{
Assert.False(TableExists("foo.OrderLines"));
Assert.False(TableExists("foo." + HistoryContext.TableName));
});
Assert.True(TableExists("bar.OrderLines"));
Assert.True(TableExists("ordering.Orders"));
Assert.True(TableExists("bar." + HistoryContext.TableName));
migrator.Update("0");
Assert.False(TableExists("foo.OrderLines"));
Assert.False(TableExists("ordering.Orders"));
Assert.False(TableExists("foo." + HistoryContext.TableName));
}
[MigrationsTheory]
public void Can_generate_and_update_clean_database_when_custom_default_schemas()
{
ResetDatabase();
var migrator = CreateMigrator<CustomSchemaContext_v1>();
var generatedMigration1 = new MigrationScaffolder(migrator.Configuration).Scaffold("Migration_v1");
migrator = CreateMigrator<CustomSchemaContext_v1>(false, scaffoldedMigrations: generatedMigration1);
migrator.Update();
Assert.True(TableExists("foo.OrderLines"));
Assert.True(TableExists("ordering.Orders"));
Assert.True(TableExists("foo." + HistoryContext.TableName));
migrator = CreateMigrator<CustomSchemaContext_v2>(scaffoldedMigrations: generatedMigration1);
var generatedMigration2 = new MigrationScaffolder(migrator.Configuration).Scaffold("Migration_v2");
migrator
= CreateMigrator<CustomSchemaContext_v2>(
false, scaffoldedMigrations: new[] { generatedMigration1, generatedMigration2 });
ResetDatabase();
migrator.Update();
WhenNotSqlCe(
() =>
{
Assert.False(TableExists("foo.OrderLines"));
Assert.False(TableExists("foo." + HistoryContext.TableName));
});
Assert.True(TableExists("bar.OrderLines"));
Assert.True(TableExists("ordering.Orders"));
Assert.True(TableExists("bar." + HistoryContext.TableName));
migrator.Update("0");
Assert.False(TableExists("foo.OrderLines"));
Assert.False(TableExists("ordering.Orders"));
Assert.False(TableExists("foo." + HistoryContext.TableName));
}
[MigrationsTheory]
public void Can_auto_update_after_custom_default_schema_introduced()
{
ResetDatabase();
var migrator = CreateMigrator<CustomSchemaContext_v1>();
var generatedMigration = new MigrationScaffolder(migrator.Configuration).Scaffold("Migration_v1");
migrator = CreateMigrator<CustomSchemaContext_v1>(false, scaffoldedMigrations: generatedMigration);
migrator.Update();
Assert.True(TableExists("foo.OrderLines"));
Assert.True(TableExists("ordering.Orders"));
Assert.True(TableExists("foo." + HistoryContext.TableName));
migrator = CreateMigrator<CustomSchemaContext_v1b>(scaffoldedMigrations: generatedMigration);
migrator.Update();
Assert.True(TableExists("crm.tbl_customers"));
migrator.Update("0");
Assert.False(TableExists("crm.tbl_customers"));
Assert.False(TableExists("foo.OrderLines"));
Assert.False(TableExists("ordering.Orders"));
Assert.False(TableExists("foo." + HistoryContext.TableName));
}
[MigrationsTheory]
public void Can_auto_update_before_custom_default_schema_introduced()
{
ResetDatabase();
var migrator = CreateMigrator<ShopContext_v1>();
migrator.Update();
Assert.True(TableExists("dbo." + HistoryContext.TableName));
migrator = CreateMigrator<CustomSchemaContext_v1>();
var generatedMigration = new MigrationScaffolder(migrator.Configuration).Scaffold("Migration_v1");
migrator = CreateMigrator<CustomSchemaContext_v1>(scaffoldedMigrations: generatedMigration, automaticDataLossEnabled: true);
migrator.Update();
WhenNotSqlCe(
() =>
{
Assert.True(TableExists("foo." + HistoryContext.TableName));
Assert.False(TableExists("dbo." + HistoryContext.TableName));
});
migrator.Update("0");
Assert.False(TableExists("foo." + HistoryContext.TableName));
Assert.False(TableExists("dbo." + HistoryContext.TableName));
}
[MigrationsTheory]
public void Auto_update_when_custom_default_schema_should_throw()
{
ResetDatabase();
var migrator = CreateMigrator<CustomSchemaContext_v1>();
Assert.Throws<MigrationsException>(() => migrator.Update())
.ValidateMessage("UnableToMoveHistoryTableWithAuto");
}
[MigrationsTheory]
public void Auto_update_when_custom_default_schema_introduced_should_throw()
{
ResetDatabase();
var migrator = CreateMigrator<ShopContext_v1>();
migrator.Update();
migrator = CreateMigrator<CustomSchemaContext_v1>();
Assert.Throws<MigrationsException>(() => migrator.Update())
.ValidateMessage("UnableToMoveHistoryTableWithAuto");
}
[MigrationsTheory]
public void Can_get_database_migrations_when_custom_default_schema_introduced()
{
ResetDatabase();
var migrator = CreateMigrator<ShopContext_v1>();
migrator.Update();
Assert.True(TableExists("dbo." + HistoryContext.TableName));
migrator = CreateMigrator<CustomSchemaContext_v1>();
Assert.NotEmpty(migrator.GetDatabaseMigrations());
}
}
}