我想首先更改由ef代码创建的整个数据库的Collation,我尝试通过在创建后运行脚本来实现它,但它不起作用,
_dbContext.Database.Delete();
_dbContext.Database.CreateIfNotExists();
_dbContext.Database.ExecuteSqlCommand("ALTER DATABASE afi COLLATE French_CI_AI");
是否可以在创建数据库之前设置排序规则?
这是我得到的例外:
重置连接会导致与初始状态不同的状态 登录。登录失败。用户' afi'登录失败。一个严重的错误 发生在当前命令上。结果,如果有的话,应该是 丢弃。
[SqlException(0x80131904):重置连接会导致a 与初始登录状态不同的状态。登录失败。
用户'登录失败。电流发生严重错误 命令。如果有的话,结果应该被丢弃。]
System.Data.SqlClient.SqlConnection.OnError(SqlException异常, Boolean breakConnection,Action`1 wrapCloseInAction)+388
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)+688
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler,SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,布尔& dataReady)+4403
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler,SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)+84
System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(字节[] buffer,TransactionManagerRequestType请求,String transactionName, TransactionManagerIsolationLevel isoLevel,Int32超时, SqlInternalTransaction事务,TdsParserStateObject stateObj, Boolean isDelegateControlRequest)+1370
System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest,String transactionName,IsolationLevel iso, SqlInternalTransaction internalTransaction,Boolean 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
System.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选项) +538 System.Data.Entity.Internal.InternalContext.SaveChanges()+218 Afi.Domain.Storage.AfiDbContext.SaveChanges()in C:\的Inetpub \ wwwroot的\ AFI \ SRC \域\存储\ AfiDbContext.cs:190
Afi.Domain.Storage.EntitySession.Commit()in C:\的Inetpub \ wwwroot的\ AFI \ SRC \域\存储\ EntitySession.cs:54
Afi.Web.Controllers.CIController.Seed(布尔excludeSomeData)中 C:\的Inetpub \ wwwroot的\ AFI的\ src \网络\ \控制器CIController.cs:263
Afi.Web.Controllers.CIController.Index()in C:\的Inetpub \ wwwroot的\ AFI的\ src \网络\ \控制器CIController.cs:89
lambda_method(Closure,ControllerBase,Object [])+81
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary2 parameters) +261
2 参数)+39
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
System.Web.Mvc.Async<> C_ DisplayClass42.b _41() +34 System.Web.Mvc.Async。<> c_ DisplayClass39.b _33() +124 System.Web.Mvc.Async。<> c_ DisplayClass4f.b _49() +837307 System.Web.Mvc.Async。<> c_ DisplayClass4f.b _49() +837307 System.Web.Mvc.Async。<> c_ DisplayClass37.b _36(IAsyncResult asyncResult)+15
System.Web.Mvc.Async<> C_ DisplayClass2a.b _20() +33 System.Web.Mvc.Async。<> c_ DisplayClass25.b _22(IAsyncResult asyncResult)+837892
System.Web.Mvc<> C_ DisplayClass1d.b _18(IAsyncResult的 asyncResult)+28
System.Web.Mvc.Async<> C_ DisplayClass4.b _3(IAsyncResult的 ar)+15 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)+65
System.Web.Mvc.Async<> C_ DisplayClass4.b _3(IAsyncResult的 ar)+15 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)+51
System.Web.Mvc<> C_ DisplayClass8.b _3(IAsyncResult的 asyncResult)+42
System.Web.Mvc.Async<> C_ DisplayClass4.b _3(IAsyncResult的 ar)+15 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult) asyncResult)+51
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)+288
答案 0 :(得分:6)
解决方法可能是执行sql命令来创建数据库,而不是使用_dbContext.Database.CreateIfNotExists();
_dbContext.Database.ExecuteSqlCommand(“
CREATE DATABASE [databasename] ON PRIMARY(NAME = N'databasename', FILENAME = N'c:\ PathToData \ databasename.mdf',SIZE = 2048KB, FILEGROWTH = 1024KB)登录(NAME = N'databasename_log',FILENAME = N'c:\ PathToLog \ databasename_log.ldf',SIZE = 1024KB,FILEGROWTH = 10%)COLLATE French_CI_AI
“);
我放了一点间距以便于阅读,显然将databasename更改为您想要的名称,还有PathToData和PathToLog。
如果您将服务器的排序规则更改为French_CI_AI,则将使用此排序规则创建所有新数据库,但它并不总是最佳选择,如果您已经过了开发阶段,因为它也会影响temp_db数据库(临时表和其他临时对象)。
答案 1 :(得分:0)
只将[]添加到名称数据库,
_dbContext.Database.ExecuteSqlCommand("ALTER DATABASE [afi] COLLATE French_CI_AI");
答案 2 :(得分:0)
对于c#SqlConnection.ClearAllPools();在下一个连接启动之前也可以。
答案 3 :(得分: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));