20

Ich habe ein Modell aus db mit Entity Framework generiert. Wenn ich Änderungen in der Datenbank habe, aktualisiere ich das Modell aus der Datenbank, um die Änderung im Modell zu erhalten. Dieses Update wird jedoch auf alle Entitäten (Tabellen) angewendet, die im Modell enthalten sind.Wie wird nur eine Tabelle für ein Modell aus der Datenbank mit Entity Framework aktualisiert?

Jetzt füge ich eine neue Spalte in einer Tabelle Tab1 hinzu. Ich möchte das Modell nicht aus der Datenbank aktualisieren, wie einige andere Änderungen, die ich nicht in das Modell aufnehmen möchte. Ich kann die neue Eigenschaft im Modell für Entität Tab1 manuell hinzufügen. dann verursachte es Mapping-Fehler.

Also muss ich Model.Store für die Tabelle aktualisieren, um die neue Spalte aufzunehmen. Es bedeutet, dass ich das Modell nur für Tab1 aktualisieren möchte.

Wie kann ich das tun?

Antwort

39

Die EDMX-Datei ist eine XML-Datei, die aus drei verschiedenen Teilen besteht, die das Ganze ausmachen. Wenn Sie mit der rechten Maustaste auf Ihren EDMX-Datei und wählen Sie "Öffnen mit ... XML-Editor" finden Sie die 3 verschiedenen Abschnitten:

  • <edmx:ConceptualModels>
  • <edmx:StorageModels>
  • <edmx:Mappings>

Diese Abschnitte können auf eigene Gefahr manuell bearbeitet werden! :-)
Auf diese Weise können Sie nur ändern, was Sie brauchen.

Beachten Sie, dass es auch möglich ist, CSDL-, SSDL- & MSL-Dateien zu generieren, anstatt sie in die Binärdatei zu integrieren, indem Sie die Eigenschaft "Meta-Artefaktverarbeitung" Ihres Modells in "In Ausgabeverzeichnis kopieren" ändern.

Wenn Sie nicht wünschen, manuell zu tun, gibt es die Huagati DBML/EDMX tool, es ist kostenlos und Sie können es von huagati official site herunterladen oder von visual studio gallery, die ein Visual Studio-Plugin ist, dass Sie, welche Änderungen auswählen können, zu tun .

+0

danke. Ich mache es manuell. Es gibt also keine Möglichkeit, automatisch wie "Aktualisieren von der Datenbank" für einzelnes Objekt. – KentZhou

+2

Die einzige Möglichkeit, die ich kenne, ist die Verwendung von [Huagati DBML/EDMX-Tool] (http://www.huagati.com/dbmltools/). Übrigens bin ich nicht der Typ, der es geschafft hat!;-) – MaxSC

+0

Und vergiss nicht, die Antwort zu verbessern und/oder anzunehmen, wenn du das Gefühl hast, dass es hilfreich war! Danke ;-) – MaxSC

-14

Es gibt eine Möglichkeit, es automatisch zu tun.

Rechtsklick EDMX-Datei> Modell aus der Datenbank aktualisieren> Registerkarte Aktualisieren> Tabellen> Wählen Sie die Tabelle (Sie aktualisieren möchten) und drücken Sie auf Fertig, das ist es.

+7

Ich glaube nicht, das ist richtig/Von dem, was ich sagen kann, aktualisiert es alles auf der Registerkarte aktualisieren. Das ist das ursprüngliche Problem des OP (und meines). –

+2

Dies löst die gepostete Frage nicht und kann beim Aktualisieren des gesamten Modells mehr Schaden anrichten. –

+3

Während die Benutzeroberfläche so aussieht, als ob Sie nur eine einzelne Tabelle aktualisieren können, werden alle Tabellen aktualisiert. Diese Antwort ist leider falsch. Es wäre großartig, wenn der Editor aktualisiert würde, um wie hier beschrieben zu arbeiten. –

5

Ich verwende folgenden (bedingten) Trick. Dies kann nur durchgeführt werden, wenn keine Tabelle von der Tabelle abhängt, die Sie aktualisieren möchten.

  1. Löschen Sie die Tabelle, die aktualisiert werden muss.
  2. Klicken Sie mit der rechten Maustaste auf Model und wählen Sie 'Update Model from Database'. Die Tabelle wird in der Registerkarte 'Hinzufügen' angezeigt. Wählen Sie diese Tabelle und aktualisieren Sie das Modell.

Vorkehrung: Wenn andere vorhandene Tabellen haben Änderungen in ihnen, EF diese Änderungen auch aktualisieren würde.

+2

Das aktualisiert die Spalten in anderen Tabellen für mich. – Marshal

+1

Hmm .. EF würde auch Spalten in anderen Tabellen aktualisieren. Ich weiß nicht, wie ich das vermeiden kann. :-( –