2012-04-13 4 views
2

Gibt es eine Möglichkeit, EF mitzuteilen, dass SSDL für die einzelne Tabelle nicht aktualisiert wird, wenn Update Model From Database ausgeführt wird?Wie man EF-Update-Modell von der Datenbank für bestimmte Tabellen verweigern?

Ein wenig mehr Details:
Wir verwenden EF 4.3 mit Db-First-Ansatz (so, edmx und Update Model From Database).

Wir haben eine Tabelle, die aus bestimmten Gründen keinen Primärschlüssel in SQL Server hat, aber eine automatisch inkrementierte Identity Spalte, die wir EF als Primärschlüssel verwenden können.

Da EF keinen Primärschlüssel in einer Tabelle selbst findet, generiert es eine DefiningQuery in SSDL für diese Tabelle (und verhindert update/insert).

Ich kann diese DefiningQuery leicht löschen (und andere EntitySet-Attribute ändern) und alles funktioniert gut.

Außer wenn ich eine andere Update Model From Database mache, dass DefiningQuery wieder zurück ist.

Gibt es eine Möglichkeit, EF mitzuteilen, dass SSDL für diese einzelne Tabelle nicht aktualisiert wird?

+0

Nun, die ** einfachste ** Lösung wäre, dieser Tabelle einen Primärschlüssel für diese Identity-Spalte zu geben ... ** ANY ** "echte" Tabelle sollte einen Primärschlüssel haben. –

+0

Das ist ein bisschen schwer :) Diese reale Tabelle hat einen Schlüssel (im Hinterkopf): Es ist zusammengesetzt aus 4 Spalten und einige von ihnen sind Nullable (EF mag Nullen innerhalb eines Schlüssels nicht mögen). Also fügten wir einen Ersatzschlüssel für die Benutzerfreundlichkeit hinzu. Aber db wird auch vom ERP-Service bevölkert und konsumiert, und er weiß nichts über dieses 'Identity'-Feld, so dass wir es nicht zum Primärschlüssel machen können. Idee des Ersatzschlüssels funktionierte gut und wirklich vereinfachte einige Sachen, außer für ssdl-Regeneration. – Shaddix

+0

** WHY ** können Sie diese Ersatzspalte nicht den Primärschlüssel bilden ?? Der Zweck des Primärschlüssels ist es, jede Zeile eindeutig zu identifizieren - ein Ersatz "IDENTITY" macht das perfekt! –

Antwort

1

Gibt es eine Möglichkeit, EF mitzuteilen, dass SSDL für die einzelne Tabelle nicht aktualisiert wird, wenn Update Model from Database durchgeführt wird?

Nicht mit Standard-Designer in Visual Studio bereitgestellt. Sobald Sie den SSDL-Teil Ihrer EDMX-Datei geändert haben, sollten Sie ihn manuell pflegen oder ein Skript schreiben, das es jedes Mal repariert, wenn Sie Update von der Datenbank ausführen.

Alternativ können Sie leistungsfähigere Designer oder extension to Visual Studio kaufen, die Ihnen selektives Update anbieten.

Wie auch immer Sie versuchen, sollte vermieden werden. Wenn die Datenbank im Besitz von ERP ist, sollten Sie den Zugriff nur über die ERP-Programmier-API (echte ERP hat einige). Andernfalls können Sie die Funktionalität Ihres ERP-Systems beeinträchtigen, ERP-Daten korrumpieren, Leistungsprobleme verursachen oder sogar Deadlocks verursachen.

+0

Ich weiß, ich bin mir bewusst, und ich benutze die API :) Ich dachte auch über die Integration in .tt Vorlagen und eine SSDL manuell korrigieren, scheint wie ein Weg zu gehen. Danke für deine Antwort! – Shaddix

+0

FWIW, die Erweiterung ist möglicherweise keine lange Option: ** Wichtiger Hinweis: Dieses Produkt wird am 31. Dezember 2013 eingestellt. Bestehende Lizenzen sind weiterhin gültig und können weiterhin in Visual Studio 2012, 2010 und 2008 verwendet werden. Nach diesem Datum werden jedoch keine neuen Lizenzen erteilt. ** – R0MANARMY