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?
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. –
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
** 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! –