Почему EF сообщает о двойном исключении DbUpdateException в ответ на неправильно настроенную защиту SQL? - PullRequest
0 голосов
/ 13 февраля 2020

На самом деле я уже знаю, как решить проблему, которая вызвала ошибку: исправить безопасность в моей базе данных, чтобы разрешить моему приложению права на запись в нужную таблицу.

Что я не знаю, так это почему SQL проблема с разрешениями (которую вы можете увидеть в глубине внутреннего исключения: The INSERT permission was denied on the object 'AccountRelationship') привела к тому, что язык DbUpdateException ссылается на мою сущность как «дубликат», когда это действительно не так.

Это так? хорошо известное поведение EF?

Duplicate AccountRelationship

BusinessRelationshipId, BusinessRelationshipSalesforceId, GeneratorId, CustomerId



[ -Source: EntityFramework

  -Type:   System.Data.Entity.Infrastructure.DbUpdateException

  -TargetSite: Int32 SaveChanges()

  -Message: An error occurred while updating the entries. See the inner exception for details.

  -StackTrace:

  at System.Data.Entity.Internal.InternalContext.SaveChanges()

  at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()

  at System.Data.Entity.DbContext.SaveChanges()

  at Ross.Data.Replication.SalesForce.Worker.SF2SL.BizRelationshipWorker.CreateBizRelationshipInLinksTable(BusinessRelationship entity)

  at Ross.Data.Replication.SalesForce.Worker.SF2SL.BizRelationshipWorker.CreateBusinessRelationship(BusinessRelationship entity)

  at Ross.Data.Replication.SalesForce.Worker.SF2SL.BizRelationshipWorker.CreateOrUpdate(ILogger logger, BusinessRelationship entity)

  at Ross.Data.Replication.SalesForce.Worker.SF2SL.BaseEntityWorker`1.Replicate(Object objectId, Guid messageId, XmlDocument& message, String& exceptionData, ILogger logger)

     [ -Source: EntityFramework

       -Type:   System.Data.Entity.Core.UpdateException

       -TargetSite: Int32 Update()

       -Message: An error occurred while updating the entries. See the inner exception for details.

       -StackTrace:

       at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update()

       at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.<>c.<Update>b__21_0(UpdateTranslator ut)

       at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update[T](T noChangesResult, Func`2 updateFunction)

       at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update()

       at System.Data.Entity.Core.Objects.ObjectContext.<SaveChangesToStore>b__153_0()

       at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)

       at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction)

       at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass148_0.<SaveChangesInternal>b__0()

       at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)

       at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options, Boolean executeInExistingTransaction)

       at System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options)

       at System.Data.Entity.Internal.InternalContext.SaveChanges()

          [ -Source: .Net SqlClient Data Provider

            -Type:   System.Data.SqlClient.SqlException

            -TargetSite: Void OnError(System.Data.SqlClient.SqlException, Boolean, System.Action`1[System.Action])

            -Message: The INSERT permission was denied on the object 'AccountRelationship', database 'SalesforceIntegration', schema 'dbo'.

            -StackTrace:

            at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)

            at System.Data.SqlClient.SqlInternalConnection.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, Boolean& dataReady)

            at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)

            at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)

            at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)

            at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)

           at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()

            at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<>c.<NonQuery>b__4_0(DbCommand t, DbCommandInterceptionContext`1 c)

            at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)

            at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)

            at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()

            at System.Data.Entity.Core.Mapping.Update.Internal.DynamicUpdateCommand.Execute(Dictionary`2 identifierValues, List`1 generatedValues)

            at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update()

          ]

     ]

]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...