1

Ich habe ein MVC5 Projekt und ich befüllte meine Tabellen in die Datenbank über Entity Framework 6 - Code First Migration. Wenn ich auf die Tabellen schaue, sehe ich, dass einige Zeichen nicht korrekt angezeigt werden und Database Collation ist SQL_Latin1_General_CP1_CI_AS statt French_CI_AS.Datenbanksammlung nach der Migration ändern?

1) Was vorgenommen werden soll, die Database Collation beim Erstellen Datenbank über Code First zu setzen? Ich habe die folgende Methode gefunden, bin mir aber nicht sicher, ob es die beste Option für diesen Zweck ist?

public override void Up() 
{ 
    Sql("ALTER DATABASE [YourDB] COLLATE [YourCollation]", suppressTransaction: true); 
    [...Your DB Objects Creation codes here...] 
} 

Auf der anderen Seite, wenn Sie dieses Skript verwenden, in denen ich Fehler „ALTER DATABASE fehlgeschlagen. Die Standardsortierung der Datenbank‚DbName‘zu French_CI_AS werden nicht eingestellt“.

2) Ist es möglich, die Database Collation (über Code First oder SQL) nach dem Hinzufügen von Daten zu den zugehörigen Tabellen zu ändern?

Jede Hilfe willkommen ...

Antwort

2

Es sei möglich wäre, die Sortierung auch Daten nach dem Hinzufügen zu ändern. Ich nehme an, dass Ihr Problem von der Tatsache herrührt, dass Sie die Datenbank in den Einzelbenutzermodus versetzen müssen, während Sie die Sortierreihenfolge ändern. Die Datenbank muss gesperrt werden, um zu verhindern, dass andere Verbindungen sie verwenden. Wenn Sie fertig sind, stellen Sie den Multi-User-Modus wieder her.

Wenn dies Ihr Fall, dass Sie diesen Fehler sollte zusätzlich zu dem einen bekommen Sie in Ihrer Frage zeigen:

Die Datenbank nicht ausschließlich um den Vorgang auszuführen gesperrt werden könnten.

Der Migrationscode zur Behebung des Fehlers

public override void Up() 
{ 
    Sql("ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;"); 

    Sql("ALTER DATABASE [YourDB] COLLATE [YourCollation];"); 

    Sql("ALTER DATABASE [YourDB] SET MULTI_USER;"); 

    [...Your DB Objects Creation codes here...] 
} 

Ich glaube, Sie sollten den supressTransaction Parameter entfernen. Sie sollten diese Operation wahrscheinlich in einer einzigen Transaktion ausführen, falls ein Schritt fehlschlägt.

+0

Vielen Dank. Nur eine Frage: ** Was genau ist subpressTransaction ** und ** wann sollte auf wahr und falsch gesetzt werden **? Könntest du bitte ein bisschen mehr erklären? – hexadecimal

+0

Von [msdn Referenzseite] (https://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigration.sql (v = vs.113) .aspx): 'suppressTransaction': "Ein Wert, der angibt, ob die SQL-Anweisung außerhalb der für den Migrationsprozess verwendeten Transaktion ausgeführt werden soll. Wenn kein Wert angegeben wird, wird die SQL-Anweisung innerhalb der Transaktion ausgeführt." Im Allgemeinen möchten Sie, dass alle Sätze in der Migration als eine Transaktion ausgeführt werden. Andernfalls könnten Sie die Ausführung der Migration nicht sicher wiederholen, wenn etwas fehlschlägt. Ich habe nie ein Szenario gefunden, als ich es auf "wahr" setzen wollte. – Diana

+0

Bueno, Muchas Gracias Senorita :) – hexadecimal

Verwandte Themen