2010-01-22 4 views
6

Ich habe eine Legacy-Tabelle mit Mitarbeitername und Mitarbeiter-ID. Jetzt ist die Mitarbeiter-ID in char, da sie Werte enthalten kann, die mit einem Alphabet beginnen. Mitarbeiter-ID ist das einzige eindeutige Feld in der Tabelle.Wie String als Primärschlüssel in Entity-Framework zu machen!

Jetzt verwende ich eine Ansicht, um die Daten aus der Tabelle zu erfassen (es ist in einer separaten Datenbank). Aber mein Entity-Framework weigert sich, die View aufgrund des Fehlens des int-Primärschlüssels zu identifizieren.

Jede mögliche Lösung würde sehr geschätzt werden, da ich die Legacy-Tabelle nicht berühren kann.

Antwort

5

Aber mein Entity-Framework weigert sich, die Ansicht aufgrund des Fehlens des Int-Primärschlüssels zu identifizieren.

Ich bezweifle es. Die EF unterstützt Strings als PKs.

Aber Ansichten können natürlich keine PKs haben. Das bedeutet, dass Sie bei der Verwendung mit der EF zusätzliche Arbeit leisten müssen, insbesondere wenn Sie sie aktualisierbar machen. Here's how.

+2

Danke Craig! Ihre Antwort hat mir geholfen, meine Antwort zu finden. Die Employee-ID-Spalte in der Legacy-Tabelle weist Allow Nulls-Eigenschaft als wahr zu und die EF weigerte sich daher, sie als PK zu identifizieren. Sobald ich es entfernt habe, hat alles gut funktioniert. –

1

Erstellen Sie eine weitere Spalte, die ein Int ist, und verwenden Sie das als Primärschlüssel. Die Geschäftsbenutzer müssen diesen Schlüssel nicht kennen.

Meine Vermutung ist, dass die Endanwendung eine Mitarbeiter-ID mit Chartas verwendet. Wie erstes und letztes Initial plus Einstellungsdatum, etwas wie DB012210.

Wie die Tabelle intern ausgeführt wird, spielt für die aufrufende Anwendung keine Rolle, daher können Sie ein weiteres Feld als echten Primärschlüssel hinzufügen, der ein int ist. Fügen Sie dann der aktuellen EmployeeId eine eindeutige Einschränkung hinzu, verwenden Sie sie jedoch nicht wirklich als Primärschlüssel.

+0

Hallo David! Danke für Ihren Vorschlag. Ich habe es vorher versucht und es hat perfekt für mich funktioniert. Aber wie ich in meiner Frage erwähnt habe, ist es nicht erlaubt, mit der Legacy-Tabelle eine signifikante Änderung vorzunehmen, da diese Tabelle von einer großen ERP-Anwendung verwendet wird. –

Verwandte Themen