9

最初にefコードで作成されたデータベース全体の照合を変更したいのですが、作成後にスクリプトを実行して変更しようとしましたが、機能しません。

_dbContext.Database.Delete();
_dbContext.Database.CreateIfNotExists();
_dbContext.Database.ExecuteSqlCommand("ALTER DATABASE afi COLLATE French_CI_AI");

データベースを作成する前に照合を設定することは可能ですか?

それは私が得る例外です:

接続をリセットすると、最初のログインとは異なる状態になります。ログインに失敗します。ユーザー「afi」のログインに失敗しました。現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。

[SqlException(0x80131904):接続をリセットすると、最初のログインとは異なる状態になります。ログインに失敗します。

ユーザー「afi」のログインに失敗しました。現在のコマンドで重大なエラーが発生しました。結果がある場合は破棄する必要があります。]
System.Data.SqlClient.SqlConnection.OnError(SqlException例外、ブール値breakConnection、Action`1 wrapCloseInAction)+388
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj、ブール値callerHasConnectionLock、ブール値asyncClose)+688
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet BulkCopyHandler、TdsParserStateObject stateObj、Boolean&dataReady)+4403
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet BulkCopyHandler、TdsParserStateObject stateObj)+84
System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte [] buffer、TransactionManagerRequestType request、String transactionName 、Int32タイムアウト、SqlInternalTransactionトランザクション、TdsParserStateObject stateObj、ブールisDelegateControlRequest)+1370
System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest、String transactionName、IsolationLevel iso、SqlInternalTransaction internalTransaction、ブールisDelegateControlRequest)+674
System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLevel iso、String transactionName)+547
System.Data.SqlClient.SqlInternalConnection.BeginTransaction(IsolationLevel iso)+18
System.Data.SqlClient.SqlConnection.BeginDbTransaction(IsolationLevel IsolationLevel)+211
システム。 Data.EntityClient.EntityConnection.BeginDbTransaction(IsolationLevel IsolationLevel)+155

[EntityException:プロバイダー接続でトランザクションを開始中にエラーが発生しました。詳細については、内部例外を参照してください。]
System.Data.EntityClient.EntityConnection.BeginDbTransaction(IsolationLevel IsolationLevel)+4298876
System.Data.EntityClient.EntityConnection.BeginTransaction()+10
System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)+ 538 System.Data.Entity.Internal.InternalContext.SaveChanges()+218 Afi.Domain.Storage.AfiDbContext.SaveChanges()in c:\ inetpub \ wwwroot \ afi \ src \ Domain \ Storage \ AfiDbContext.cs:190Afi
。 c:\ inetpub \ wwwroot \ afi \ src \ Domain \ Storage \ EntitySession.cs:54のDomain.Storage.EntitySession.Commit()
C:\ inetpub \ wwwroot \ afi \ src \ Web \ Controllers \ CIController.cs:263
のAfi.Web.Controllers.CIController.Seed(BooleanexcludeSomeData)c:\ inetpubのAfi.Web.Controllers.CIController.Index() \ wwwroot \ afi \ src \ Web \ Controllers \ CIController.cs:89
lambda_method(Closure、ControllerBase、Object [])+81
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext、IDictionary 2 parameters)+39 System.Web .Mvc.Async。<>c_DisplayClass42.b _41()+34System.Web.Mvc.Async。<>c_ DisplayClass39.b _33()+ 124System.Web.Mvc.Async 。<>c_ DisplayClass4f.b _49()+837307System.Web.Mvc.Async。<>c_ DisplayClass4f.b2 parameters) +261
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary

_49()+837307System.Web.Mvc.Async。<>c_ DisplayClass37.b _36(IAsyncResult asyncResult)+15System.Web.Mvc.Async
。 <>c_ DisplayClass2a.b _20()+ 33 System.Web.Mvc .Async。<> c_DisplayClass25.b _22(IAsyncResult asyncResult)+837892System.Web.Mvc 。<>c_ DisplayClass1d.b _18(IAsyncResult asyncResult)+28System.Web.Mvc.Async <>c_ DisplayClass4.b _3 (IAsyncResult ar)+15 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)+65System.Web.Mvc.Async 。<>c_ DisplayClass4.b _3(IAsyncResult ar)+15System.Web.Mvc.Controller。 EndExecute(IAsyncResult asyncResult)+51System.Web.Mvc 。<>c_



DisplayClass8.b _3(IAsyncResult asyncResult)+42System.Web.Mvc.Async
。<>c_ DisplayClass4.b _3(IAsyncResult ar)+15 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+51System.Web
。 CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+606 System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)+288

4

4 に答える 4

6

回避策は、_dbContext.Database.CreateIfNotExists()を使用するのではなく、sqlコマンドを実行してデータベースを作成することです。

_dbContext.Database.ExecuteSqlCommand( "

CREATE DATABASE [databasename] ON PRIMARY(NAME = N'databasename'、FILENAME = N'c:\ PathToData \ databasename.mdf'、SIZE = 2048KB、FILEGROWTH = 1024KB)LOG ON(NAME = N'databasename_log'、FILENAME = N 'c:\ PathToLog \ databasename_log.ldf'、SIZE = 1024KB、FILEGROWTH = 10%)COLLATE French_CI_AI

");

読みやすくするために少し間隔を空けて、データベース名を必要な名前に変更し、PathToDataとPathToLogも変更しました。

サーバーの照合をFrench_CI_AIに変更すると、すべての新しいデータベースがこの照合を使用して作成されますが、これが常に最良の選択であるとは限らず、temp_dbデータベース(一時テーブルと他の一時的なオブジェクト)。

于 2012-12-14T10:24:06.943 に答える
1

c#の場合SqlConnection.ClearAllPools(); 次の接続が開始される前も同様に機能します。

于 2015-01-29T22:59:03.070 に答える
0

名前データベースに[]を追加するだけです。

_dbContext.Database.ExecuteSqlCommand("ALTER DATABASE [afi] COLLATE French_CI_AI");
于 2013-09-09T22:08:42.590 に答える
0

現在のデータベースの照合を変更する場合は、このスニペットを使用できます

_dbContext.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction,
                        "ALTER DATABASE CURRENT COLLATE Cyrillic_General_CI_AS");

また

_dbContext.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction,
                            string.Format("ALTER DATABASE [{0}] COLLATE Cyrillic_General_CI_AS", _dbContext.Database.Connection.Database));

EntityFramework6でデータベースを変更する

于 2015-10-13T12:04:53.683 に答える