If you run an entity framework migration (either automatic or explicit) against tables published for SQL Server replication you get the following error:
Would it help to create your onw Migrator?
internal sealed class Configuration : DbMigrationsConfiguration<SupplierEntities>
{
public Configuration()
{
SetSqlGenerator("System.Data.SqlClient", new SqlMigrator());
}
private class SqlMigrator : SqlServerMigrationSqlGenerator
{
public override IEnumerable<MigrationStatement> Generate(
IEnumerable<MigrationOperation> migrationOperations, string providerManifestToken)
{
yield return new MigrationStatement { Sql = "set transaction isolation level read committed" };
foreach (var statement in base.Generate(migrationOperations, providerManifestToken))
yield return statement;
}
}
}
You can write and execute SQL in your migration code:
Before SQL Server 2012 use dynamic SQL:
public override void Up()
{
Sql("DECLARE @SQL NVARCHAR(4000) = 'ALTER DATABASE '+ DB_NAME() +' SET ALLOW_SNAPSHOT_ISOLATION ON' ; EXEC sp_executeSql @SQL;", true);
}
For SQL Server 2012 or later:
public override void Up()
{
Sql("ALTER DATABASE CURRENT SET ALLOW_SNAPSHOT_ISOLATION ON",true);
}
Change "ALLOW_SNAPSHOT_ISOLATION" to your isolation level.