How to set the isolation level for Entity Framework CodeFirst Migrations

后端 未结 2 441
被撕碎了的回忆
被撕碎了的回忆 2020-12-28 17:59

If you run an entity framework migration (either automatic or explicit) against tables published for SQL Server replication you get the following error:

相关标签:
2条回答
  • 2020-12-28 18:36

    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;
        }
      }
    }
    
    0 讨论(0)
  • 2020-12-28 18:47

    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.

    0 讨论(0)
提交回复
热议问题