2017-11-26 9 views
0

Als Teil einer Aufgabe muss ich eine Webanwendung mit Entity Framework erstellen. Ich folge dem Tutorial bei https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application.Entity Framework Fehlermeldung DbUpdateException

Es gibt vier Tabellen: Branch, Department, Employee und Title.

Nachdem ein Verfahren zu schaffen, die Daten auf Saatgut I habe die Anwendung im Debugging-Modus ausgeführt und bekam die folgende Fehlermeldung:

System.Data.Entity.Infrastructure.DbUpdateException: ‚Ein Fehler ist aufgetreten, während die Aktualisierung Einträge. Details finden Sie in der inneren Ausnahme. "SqlException: Die INSERT-Anweisung steht im Konflikt mit der FOREIGN KEY-Einschränkung" FK_dbo.Employee_dbo.Branch_BranchId ". Der Konflikt ist in der Datenbank "HumanResourcesWebApp1", Tabelle "dbo.Branch", Spalte "ID" aufgetreten. Die Anweisung wurde beendet.

Ich habe diese Nachricht recherchiert, aber ich befolge die Antworten nicht, die ich gefunden habe. Ich wäre dankbar für eine Richtung. Ich füge auch die Struktur der Klassen hinzu, wenn es hilft. Ich verstehe, dass das Problem zwischen dem Primärschlüssel der Branch Tabelle ist, wenn es als ein Fremdschlüssel von der Employee Tabelle gesehen wird, aber ich weiß nicht, wo Änderungen vorzunehmen sind.

Niederlassung:

public int ID { get; set; } 
public string Address { get; set; } 
public int DepartmentID { get; set; } 
public virtual ICollection<Employee> Employees { get; set; } 

Abteilung:

public int ID { get; set; } 
public string DepartmentName { get; set; } 
public string DepartmentFunction { get; set; } 
public virtual ICollection<Branch> Branches { get; set; } 

Mitarbeiter:

public int ID { get; set; } 
public string FirstName { get; set; } 
public string SecondName { get; set; } 
public double Salary { get; set; } 
public DateTime StartingDate { get; set; } 
public int BranchId { get; set; } 
public int TitleId { get; set; } 

Titel:

public int ID { get; set; } 
public string TitleName { get; set; } 
public virtual ICollection<Employee> Employees { get; set; } 

Vielen Dank im Voraus

+1

ist klar aus dem Fehler, dass, während Sie das Mitarbeiterobjekt speichern, die BranchId – Monah

+0

Monah nicht ausgefüllt ist, wenn es klar war hätte er wahrscheinlich nicht gefragt .. wie Chris Tarrant sagt "es ist nur leicht wenn du die Antwort kennst" –

Antwort

1

Sie versuchen, Mitarbeiterdaten zu speichern, die einen Zweig verweisen, die nicht existiert. Entweder haben Sie die Verzweigungs-ID überhaupt nicht gesetzt oder Sie haben sie auf eine Nummer gesetzt, die in der Branch-Tabelle nicht vorhanden ist. Legen Sie die Zweig-ID der Mitarbeiter auf einen bereits vorhandenen Zweig fest. Wenn keine Zweige vorhanden sind, erstellen Sie eine. Sie sollten in der Lage sein, eine Zweigstelle und einen Mitarbeiter gleichzeitig im Code zu erstellen, solange der Mitarbeiter sich korrekt auf die Zweigstelle bezieht. Entity-Framework sollte die Filiale zuerst speichern, so dass es an dem Punkt existiert es zu speichern, der Mitarbeiter

+0

Ignoriere meinen vorherigen Kommentar bitte. Danke beiden, sehr hilfreich. Ich werde ein bisschen darüber schwitzen, da ich tatsächlich die Zweig-ID gesetzt und ausgefüllt habe, aber zumindest weiß ich, wo ich hinschauen muss. Danke noch einmal. – FranBrugnera

+0

Vorausgesetzt, dass es die DB ist, die diesen Fehler gibt, nicht EF, kann es hilfreich sein, eine Protokollierung dessen, was SQL EF ausführt, und wann zu aktivieren; dann können Sie sehen, welche Aussage den Fehler verursacht.Es ist ungefähr 10 Sekunden später, dass Sie erkennen, dass EF versucht, "Mr. Test-Mitarbeiter der Zweig-ID -1" zu speichern, dass Sie sich plötzlich an den Test-/Debug-Code erinnern werden, den Sie geschrieben haben, hundert Zeilen aufwärts (oder ein ähnliches Gotcha) :) –

+0

Verstanden und sehr nützlich, ich habe tatsächlich nicht über die Protokollierungsoption :) nachgedacht. Vielen Dank nochmal. – FranBrugnera