2016-06-08 5 views
0

Ich bin in meiner ASP.Net MVC-Anwendung EF6 verwenden. Für eine bestimmte Tabelle funktioniert meine Ansicht, Code aktualisieren und löschen, aber meine Einfügung löst eine DbUpdateException.Entity Framework 6 - Erstellen von Datensatz mit Autowert ID wirft DbUpdateException

System.Data.Entity.Infrastructure.DbUpdateException wurde nicht behandelt durch Benutzercode
HResult = -2146233087
Message = Es kann keine gültige Reihenfolge für abhängige Operationen bestimmen. Abhängigkeiten können aufgrund von Fremdschlüsseleinschränkungen, Modellanforderungen oder vom Speicher generierten Werten bestehen.
Source = EntityFramework
Stacktrace:
bei System.Data.Entity.Internal.InternalContext.SaveChanges() bei SupportDiary.Models.SchedulerRequestService.Insert (WRequestViewModel Anfrage) in C: \ Projects \ SupportDiary \ SupportDiary \ Models \ SchedulerRequestService.vb: Zeile 92 bei SupportDiary.Hubs.WRequestHub.Create (Anforderung WRequestViewModel) in C: \ Projekte \ SupportDiary \ SupportDiary \ Hubs \ WRequestHub.vb: Zeile 37 bei Lambda_method (Closure, IHub, Object []) bei Microsoft.AspNet.SignalR.Hubs.HubDispatcher.Incoming (IHubIncomingInvokerContext context) Innerexception: HResult = -2146233087 M esessage = Es konnte keine gültige Reihenfolge für abhängige Operationen ermittelt werden. Abhängigkeiten können aufgrund von Fremdschlüsseleinschränkungen, Modellanforderungen oder vom Speicher generierten Werten bestehen. Source = EntityFramework Stacktrace: bei System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.DependencyOrderingError (IEnumerable 1 remainder) at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.ProduceCommands() at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update() at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func 1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) bei System.Data.Entity.Core .Objects.ObjectContext.SaveChangesToStore (Saveoptions Optionen, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction) bei System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute [TResult] (Func`1 Betrieb) bei System.Data.Entity.Core.Objects. ObjectContext.SaveChangesInternal (Saveoptions Optionen, Boolean executeInExistingTransaction) bei System.Data.Entity.Internal.InternalContext.SaveChanges() InnerException:

Dies ist der Code für Einfügen und Aktualisieren ... wie gesagt Update funktioniert.

 Public Overridable Function Insert(request As WRequestViewModel) As WRequestViewModel 

     Dim entity As New tWorkRequest() 

     entity.Start = request.Start 
     entity.[End] = request.[End] 
     entity.Title = request.Title 
     entity.Diary = request.Diary 
     entity.Team = request.Team 
     entity.WorkManagerID = request.WorkManagerID 
     entity.AssigneeID = request.AssigneeID 
     entity.ChangeRef = request.ChangeRef 
     entity.Description = request.Description 
     entity.ImpactedServers = request.ImpactedServers 
     entity.ImpactedServices = request.ImpactedServices 
     entity.IsBAU = request.IsBAU 
     entity.ProjectRef = request.ProjectRef 
     entity.Notes = request.Notes 
     entity.IsOOH = request.IsOOH 
     entity.IsAllDay = request.IsAllDay 
     entity.RecurrenceRule = request.RecurrenceRule 
     entity.RecurrenceID = request.RecurrenceID 
     entity.RecurrenceException = request.RecurrenceException 
     entity.StartTimezone = request.StartTimezone 
     entity.EndTimezone = request.EndTimezone 
     entity.RequestStatus = request.RequestStatus 

     Using de As New SupportDiaryEntities 

      de.tWorkRequests.Add(entity) 
      de.SaveChanges() 

      request.WRequestID = entity.WRequestID 

      Return request 

     End Using 

    End Function 

    Public Overridable Sub Update(request As WRequestViewModel) 

     Using de As New SupportDiaryEntities 

      Dim entity = de.tWorkRequests.FirstOrDefault(Function(r) r.WRequestID = request.WRequestID) 

      entity.Start = request.Start 
      entity.[End] = request.[End] 
      entity.Title = request.Title 
      entity.Diary = request.Diary 
      entity.Team = request.Team 
      entity.WorkManagerID = request.WorkManagerID 
      entity.AssigneeID = request.AssigneeID 
      entity.ChangeRef = request.ChangeRef 
      entity.Description = request.Description 
      entity.ImpactedServers = request.ImpactedServers 
      entity.ImpactedServices = request.ImpactedServices 
      entity.IsBAU = request.IsBAU 
      entity.ProjectRef = request.ProjectRef 
      entity.Notes = request.Notes 
      entity.IsOOH = request.IsOOH 
      entity.IsAllDay = request.IsAllDay 
      entity.RecurrenceRule = request.RecurrenceRule 
      entity.RecurrenceID = request.RecurrenceID 
      entity.RecurrenceException = request.RecurrenceException 
      entity.StartTimezone = request.StartTimezone 
      entity.EndTimezone = request.EndTimezone 
      entity.RequestStatus = request.RequestStatus 

      de.SaveChanges() 

     End Using 

    End Sub 

Wenn ich es als Autowert-ID-Feld (WRequestId) im Insert-Code in Einheit bohren auf 0 gesetzt

Ich bin mir nicht sicher, wie dieses Problem zu beheben ... sucht on-line geben Details über einen Fehler bezüglich DatabaseGeneratedOption.Identity, aber es sieht so aus, als wäre es ein Fehler in EF4. Aber ich habe meine edmx-Datei überprüft und dieser Parameter ist für alle meine ID-Felder für jede Tabelle korrekt eingestellt.

Dies ist die EF automatisch generierte Datei für die Tabelle in Frage ...

'------------------------------------------------------------------------------ 
    ' <auto-generated> 
    '  This code was generated from a template. 
    ' 
    '  Manual changes to this file may cause unexpected behavior in your application. 
    '  Manual changes to this file will be overwritten if the code is regenerated. 
    ' </auto-generated> 
    '------------------------------------------------------------------------------ 

    Imports System 
    Imports System.Collections.Generic 

    Partial Public Class tWorkRequest 
     Public Property WRequestID As Integer 
     Public Property Title As String 
     Public Property Start As Date 
     Public Property [End] As Date 
     Public Property Diary As String 
     Public Property Team As String 
     Public Property WorkManagerID As Integer 
     Public Property AssigneeID As Integer 
     Public Property ChangeRef As String 
     Public Property Description As String 
     Public Property ImpactedServers As String 
     Public Property ImpactedServices As String 
     Public Property IsBAU As Boolean 
     Public Property ProjectRef As String 
     Public Property Notes As String 
     Public Property IsOOH As Boolean 
     Public Property IsAllDay As Boolean 
     Public Property RecurrenceRule As String 
     Public Property RecurrenceID As Nullable(Of Integer) 
     Public Property RecurrenceException As String 
     Public Property StartTimezone As String 
     Public Property EndTimezone As String 
     Public Property RequestStatus As Integer 

     Public Overridable Property tWorkRequests1 As ICollection(Of tWorkRequest) = New HashSet(Of tWorkRequest) 
     Public Overridable Property tWorkRequest1 As tWorkRequest 

    End Class 

Irgendwelche Vorschläge anyone?

+1

Schauen Sie sich diese Lösung an http://stackoverflow.com/questions/14153208/unable-to-deterine-a-valid-ordering-forde-dependens – ssanga

Antwort

0

Der Link, auf den @ssanga gezeigt hat, hatte keine akzeptierte Lösung, aber die allgemeine Antwort seamed, um die ID auf -1 zu setzen. Ich habe das versucht, aber eine andere Ausnahme bekommen, die auf ein anderes Problem hingewiesen hat. Die von EF automatisch generierte Klasse für die Tabelle hatte die folgenden Zeilen ...

Public Overridable Property tWorkRequests1 As ICollection(Of tWorkRequest) = New HashSet(Of tWorkRequest) 
Public Overridable Property tWorkRequest1 As tWorkRequest 

Löschen dieser Zeilen und meine Create funktioniert. Ich ging dann wieder in meine Edmx-Datei in Visual Studio und Generated Model for Database zurück und diese Zeilen wurden nicht wieder angezeigt.

Nicht sicher, warum sie überhaupt dort waren.

Verwandte Themen