2017-01-16 2 views
1

Ich verwende derzeit eine SQL Server-Datenbank und muss sie mit ASP.Net mithilfe von Entity Framework verbinden. Ich habe derzeit keine Fremdschlüssel in meiner Datenbank, kann ich weiterhin die Datenbank scaffolden und LINQ-Abfragen mit Befehlen wie .Include() ausführen?So rüsten Sie eine SQL Server-Datenbank mit ASP.Net Entity Framework

Das aktuelle Problem, das mir begegnet, ist mein Datenbankmodell speichert historische Daten, so dass ich mehrere Tabellen mit zusammengesetzten Primärschlüsseln habe. Ohne diese Eins-zu-eins-Beziehung in der Datenbank kann ich keine Abfragen in Bezug auf Beziehungen wie die .Include()-Methode ausführen.

So sind meine Fragen wie folgt:

  1. Muss ich Fremdschlüssel in der SQL Server-Datenbank, um wie .Include() Funktionen zu nutzen umfassen müssen?

  2. Ich lese online, dass der einfachste Weg, eine FK Relation zwischen einem primären zusammengesetzten Schlüssel und einer einzelnen PK in einer SQL Server Datenbank einzuschließen, dummy Spalten in den Tabellen zu erstellen, um den zusammengesetzten Primärschlüssel zu beziehen Tabellen Fremdschlüssel. Gibt es eine bessere Möglichkeit, eine FK-Beziehung außerhalb der Erstellung von Dummy-Spalten oder der Umstrukturierung der Daten zu erstellen?

Unten ist ein Beispiel dafür, wie die zusammengesetzten Primärschlüssel zu einzelnen Primärschlüssel aussieht:

ID*| CODE* | YEAR* | SEQ*| DATA 
01 | ABCD | 2015 | 01 | 23 
01 | ABCD | 2016 | 01 | 24 
02 | ABCD | 2016 | 01 | 21 


CODE* | DESC 
ABCD | AlphabetSoup 
  • = primary der Tabelle Schlüssel
+0

Die abhängige Entität FK muss auf die Principal Entity PK zeigen. In Ihrem Beispiel ist die Tabelle mit der zusammengesetzten PK die abhängige Tabelle, sodass es kein Problem gibt, 'Table1.CODE' als FK-Verknüpfung mit' Table2 einzurichten.CODE'. Die Assoziation wäre viele (Tabelle 1) zu eins (Tabelle 2). –

Antwort

1

Muss ich schließen Fremdschlüssel in der SQL Server-Datenbank

Nein, Sie können Assoziationen zu Ihrem Modell hinzufügen. Aber das bedeutet nicht, dass es sinnvoll ist, auf Fremdschlüssel in der Datenbank zu verzichten. Wenn du kannst, füge sie so schnell wie möglich hinzu, vorzugsweise gestern.

Sie können die Assoziation mit dem EF-Klasse-Modell hinzufügen, indem Sie die fließend API verwenden, zum Beispiel:

modelBuilder.Entity<Main>() 
      .HasRequired(m => m.Code).WithMany() 
      .HasForeignKey(m => m.CODE); 

... wo Main sind der Tisch mit dem Verbund PK.

erstellen Dummy-Spalten in den Tabellen

nicht sicher, was Sie damit meinen. Wie Sie sehen, kann ein Feld der zusammengesetzten PK perfekt als ein FK-Feld in einer anderen Tabelle dienen (als Code bezeichnet).

Fügen Sie Ihrer Datenbank erneut Fremdschlüssel hinzu, damit Sie referenzielle Integrität haben. Derzeit gibt es keine Garantie dafür, dass Include ordnungsgemäß funktioniert, da in der Spalte CODE der Tabelle Main nicht übereinstimmende Werte vorhanden sein können.

Verwandte Themen