2010-11-23 3 views
1

Von der regulären aspnet_Users-Tabelle habe ich zwei Untertabellen mit eins-zu-eins-Beziehung auf UserId erstellt.Wie verwende ich Tabelle-pro-Typ EF4, um Datensätze in Untertabellen zu erstellen, die von aspnet_Users erben?

Table UserClient 
-UserId int PK 
-ClientNumber int 

Table UserEmployee 
-UserId int PK 
-EmployeeNumber int 

Ich habe eine Tabelle pro Typ-Modell in der edmx erstellt und möchte nun den entsprechenden Eintrag in der entsprechenden Untertabelle erstellen, wenn ich einen neuen aspnet_User Datensatz durch die Mitgliedschaft gespeicherte Prozeduren erstellen, wie unten dargestellt:

Ob vom Typ "UserClient" oder "UserEmployee" ist abhängig von seiner RoleId, die ich derzeit unterscheiden, wenn durch Abfrage benötigt. Jetzt möchte ich die Eigenschaften jedes Typs durch Tabellen erweitern.

Nehmen wir an, der neu erstellte Benutzer ist ein Client.

Wie füge ich einen Datensatz in die UserClient-Tabelle mit seiner User-ID aspnet_Users und dieser ClientNumber?

Antwort

1

Die beste Methode zum Erstellen eines Clients für einen vorhandenen Benutzer ist die Verwendung einer gespeicherten Prozedur ; keine gespeicherte Prozedur, die über Zuordnungen mit der Client-Entität verbunden ist, sondern eine separate Prozedur, die explizit aus dem Code aufgerufen werden kann.
Idealerweise wäre es ein SP, der eine UserId als Parameter akzeptiert, eine neue Zeile mit dieser Benutzer-ID in die UserClient-Tabelle einfügt und dann ein vollständiges Client-Objekt zurückgibt, damit es sofort verwendet werden kann.

+0

danke, ich habe diese Methode erfolgreich verwendet. –

+0

Kein Problem, froh, dass es geholfen hat :) –

1

Wäre es nicht sinnvoller, eine kostenlose Tabelle zu erstellen, nennen wir sie "Benutzer" und wenden TPT darauf an?

Ihre Tabelle "Benutzer" würde eine FK in der Tabelle "aspnet_Users" (GUID oder E-Mail) haben. Dann haben Sie Ihre zwei Tabellen von dass Tabelle abgeleitet.

Wenn Sie bestimmte Dinge zur Authentifizierung/Mitgliedschaft tun möchten, verwenden Sie die integrierte API des Mitgliedschaftsanbieters.

Wenn Sie bestimmte Dinge für Ihr Domänenmodell tun möchten, verwenden Sie Ihr TPH-Modell. Rufen Sie in Ihrem obigen Beispiel ("Create Model" -Methode) die Membership-API-Methode auf: MembershipService.CreateUser (wie Sie es tun), und rufen Sie dann eine andere Methode namens UserDomainService.CreateUser auf, die den FK akzeptiert (GUID oder E-Mail)) für den Benutzer einfach erstellen und diesen neuen Benutzer in Ihrem TPH-Modell beibehalten.

+0

Danke, ich habe diese Methode jetzt verwendet und würde es als Antwort überprüfen, außer dass die Antwort unten über die Verwendung der gespeicherten Prozedur näher an der Crux der ursprünglichen Frage ist. –

+0

Keine Probleme. Ich dachte nur, ich würde eine Alternative anbieten. – RPM1984