【发布时间】:2014-01-19 13:15:07
【问题描述】:
我在尝试使用以下代码创建数据库时遇到错误。 请注意,如果未传入连接字符串,则不会发生此问题。 当我在 IDE 中运行程序时也会出现问题。如果我运行程序 .exe 或在 IDE 中运行单元测试,则不会发生这种情况。
但是,如果数据库是通过运行单元测试或运行 .EXE 创建的,那么 __MigrationHistory 表将在主表部分创建,而不是系统表。
public Context(string connString, bool AddInitialRecords )
: base(connString ?? "MyContextName")
{
this.CheckDatabase(AddInitialRecords);
}
public void CheckDatabase(bool AddInitialRecords)
{
if (this.Database.Exists())
{
// upgrade stuff
}
else
{
Database.Create(); // error occurs here
// seeding stuff
}
}
如果我只使用类似的东西,我不会遇到问题
var db1 = new Context();
db1.Database.CreateIfNotExists();
我找到了一些文档here,但这让我很困惑。我是从“稳定版本”安装的,我肯定没有经历过 2012 年的事情吗?我对 PM 做错了什么?
问题的错误信息是......
发生 System.Data.Entity.Core.EntityCommandExecutionException
HResult=-2146232004 消息=执行 命令定义。有关详细信息,请参阅内部异常。
来源=EntityFramework StackTrace: 在 System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior 行为)InnerException: System.Data.SqlClient.SqlException H结果=-2146232060 消息=无效的对象名称 'dbo.__MigrationHistory'。 Source=.Net SqlClient 数据提供者 错误代码=-2146232060 班级=16 行号=1 数量=208 程序="" 服务器=.\SQLEXPRESS 状态=1 堆栈跟踪: 在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, Boolean breakConnection, Action`1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader 数据流, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) 在 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() 在 System.Data.SqlClient.SqlDataReader.get_MetaData() 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior,字符串 resetOptionsString) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior runBehavior、布尔 returnStream、布尔 异步,Int32 超时,任务和任务,布尔 asyncWrite) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法,TaskCompletionSource`1 完成,Int32 超时,Task& 任务, 布尔异步写入) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法) 在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法) 在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为) 在 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.c__DisplayClassb.b__8() 在 System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TInterceptionContext,TResult](Func`1 操作,TInterceptionContext,interceptionContext,Action`1 正在执行,Action`1 已执行) 在 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand 命令,DbCommandInterceptionContext 拦截上下文) 在 System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior 行为) 在 System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand、CommandBehavior 行为) 内部异常:
【问题讨论】:
-
您在调试应用程序时是否有机会看到此异常,但在未连接调试器的情况下运行应用程序时看不到它?
-
没错。我用信息更新了问题。
-
对遇到类似问题的人有用的链接forums.asp.net/t/…
标签: entity-framework-6 package-managers