c# - Entity Framework 6 中的 CreatedOn 列

标签 c# entity-framework azure-sql-database

升级到 Entity Framework 6 后,我们实现了自己的 DbExecutionStrategy。除了现有的 SqlAzureExecutionStrategy 我们的策略还记录异常。 事实证明, Entity Framework 每隔 15-30 分钟就会抛出内部 SqlException System.Data.SqlClient.SqlException (0x80131904):列名称“CreatedOn”无效。 这是一个内部错误。似乎 EF 会定期检查某个表上是否存在 CreatedOn 列。有什么优雅的方法可以防止抛出这个异常吗?

这是一个调用堆栈:

   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, ref Boolean dataReady)
   at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, ref Task task, Boolean asyncWrite, SqlDataReader ds)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, ref Task task, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch(Func`1 operation, TInterceptionContext interceptionContext, Action`1 executing, Action`1 executed)
   at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext)
   at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)

最佳答案

在过去, Entity Framework 曾经在 __MigrationHistory 表中有一列“CreatedOn”。

每次 AppDomain 启动时,它都会检查数据库是否需要迁移。 EF 实际上尝试读取“Cr​​eatedOn”列,但显然会失败,但会记录异常。 EF 围绕此检查有一个难看的 try/catch all block ,如果抛出异常(缺少列),则它不会尝试“迁移”CreatedOn 列。

目前没有办法禁用该检查,除了不记录它...

关于c# - Entity Framework 6 中的 CreatedOn 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19646659/

相关文章:

c# - 用于对存储过程进行分组的单独 EDMX

sql - SQL Server 中的 SQL 查询的长度是否有限制?

ASP.NET 通用提供程序和 session 状态

c# - 在控制台应用程序中获取屏幕分辨率

c# - 将随机方法作为参数传递?

c# - 使用 Entity Framework 4、MySQL 和代码优先存储字节数组?

c# - Entity Framework : read only property vs parameter-less method

sql - 具有可能不同键的两个实体映射到同一行

sql-server - 使用 BCP 将数据复制到 Azure 时未显示任何错误,但未传输任何数据

c# - Web API 服务 - 如何使服务器上的请求并发执行