2017-10-29 2 views
-1

So habe ich zwei Tabellen: Mitarbeiter und Adresse. Jeder Mitarbeiter muss eine Adresse haben.So fügen Sie Daten in die Beziehung 1..1 ein C#

EmployeeId PK in Employee-Tabelle ist, ist es Identität und Autoinkrement AddressId ist PK in der Adresstabelle, ist es Identität und Autoinkrement

Wenn ich einen neuen Datensatz erstellen möchte ich erhalte A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column:

Ich verschwendete einen ganzen Tag und weiß immer noch nicht, wie ich es beheben kann. Außerdem bin ich Anfänger in der Datenbankprogrammierung. Ich benutze Entity Framework und C#:

ich Bilder für weitere Informationen am Hochladen:

enter image description here

enter image description here

enter image description here

+0

Also habe ich zuerst versucht, die Adresse und dann der Mitarbeiter, immer noch den gleichen Fehler hinzuzufügen. –

+1

Ihr Fehler sagt Ihnen, dass der FK nicht berechnet/gesetzt werden kann, da es eine Datenbank generiert. Normalerweise sind Eins-zu-Eins-Beziehungen schlechtes Design. Was Sie jedoch tun können, ist eine zusätzliche FK, entfernen Sie die Identity Mapping aus einer Spalte oder verwenden Sie eine Transaktion, um beide gleichzeitig einzustellen. Das Tutorial http://www.entityframeworktutorial.net/add-one-to-one-entities-in-entity-framework.aspx verwendet den Transaktionsansatz, denke ich - ich bezweifle, dass sie Identity Insert verwenden, aber das würde die Verwendung erfordern von Transaktionen auch. – DevilSuichiro

Antwort

0

Ich änderte IsIdentity auf Adresstabelle AddressId, aber immer noch ein Primärschlüssel. Und das hat mein Problem gelöst.

0

Es wegen ist eine falsch platzierte Fremdschlüssel in der Tabelle.

Chrck in Beziehung vor allem Fremdschlüssel. Löschen Sie das Schema. Sie müssen die EDMX-Dateien aktualisieren (und nicht genug, um die Tabelle aus dem Modell zu "erneuern", Sie müssen die Tabelle im Modell wieder entfernen und hinzufügen).

0

1..1 Beziehungen sind in relationalen Datenbanken nicht wirklich möglich. Das Problem besteht darin, dass es keine Reihenfolge zum Einfügen der Entitäten gibt, die den anderen Fremdschlüssel nicht verletzen. Wenn Sie zuerst den Mitarbeiter einfügen, existiert die Adresse noch nicht, aber Sie können die Adresse nicht ohne den Mitarbeiter einfügen.

Daher meine Empfehlung für Ihre genaue Frage ändert es in 0-1,1 Beziehung. Jeder Mitarbeiter MUSS haben eine Adresse, aber Sie nicht wirklich brauchen den Mitarbeiter für die Adresse. Fügen Sie dann die Adresse zuerst ein, weisen Sie sie dem Mitarbeiter zu und fügen Sie den Mitarbeiter als nächstes ein. Dann speichern Sie in einer Transaktion.

Persönlicher Hinweis: Wenn Ihre Beziehung wirklich 1..1 ist, besteht kein Grund, sie in zwei Tabellen aufzuteilen. Der Zweck von Tabellen und Beziehungen besteht darin, Redundanzen zu vermeiden. Allerdings kann eine Adresstabelle, die MUSS einen Mitarbeiter haben, sowieso nicht für irgendetwas anderes verwendet werden, so dass Sie auch nur die Adressspalten der Mitarbeitertabelle hinzufügen können. Dies funktioniert nicht nur, sondern ist auch schneller.

Best Practices für Datenbankdesign und Klassendesign sind nicht identisch. Was in C# in zwei Klassen aufgeteilt werden sollte, könnte eine einzelne Tabelle sein und umgekehrt.

+0

Was soll ich tun? : D –

+0

Brauchen Sie aus anderen Gründen zwei Tabellen? Benutze 0-1 ..1, sonst für eine einzelne Tabelle gehen. – Toxantron