Entity Framework Multitenant-Architektur für gemeinsame Daten: einzelne Spalte, mehrere Fremdschlüssel

8

Ich habe folgende Datenstruktur:

%Vor%

Ich erhalte den folgenden Fehler:

  

Die Fremdschlüsselkomponente 'TenantId' ist keine deklarierte Eigenschaft für   Geben Sie 'SpecialOrder' ein. Stellen Sie sicher, dass es nicht explizit ausgeschlossen wurde   aus dem Modell und dass es eine gültige primitive Eigenschaft ist.

Fehler tritt bei Verwendung der Fluent Api Konfiguration auf:

%Vor%

Ohne die OtherClass Referenz in SpecialOrder kann ich Objekte frei ohne Probleme erstellen (einschließlich SpecialOrder , SuperSpecialOrder etc).

Jeder hat eine Ahnung, was los ist? Ich bin hier verloren: (

Bearbeiten Ich habe in anderen Fragen gesehen, dass Leute die TenantId aus Tabellen entfernen, dies ist keine Option, da Primärschlüssel nicht über Mandanten hinweg einzigartig sind und wir die gemeinsame Datenarchitektur beibehalten wollen.

Ich weiß, dass die Problemumgehung eine zweite TenantId in der SpecialOrder-Klasse hat, aber das erscheint mir nicht logisch.

    
Bas 14.08.2012, 09:48
quelle

2 Antworten

7

Versuchen Sie eine TPT zu machen, wo es eine separate Tabelle für Bestellung / Mieter gibt? Wenn dem so ist, denke ich, dass das andere Poster korrekt ist, und es gibt einen Bug in EF.

Wenn Kunden / Produkte Ihre zugeordneten Klassen sind, könnte dies für Sie funktionieren.

Was mir beim Erstellen Ihrer Datenbank passiert ist, dass ich versucht habe, die abstrakte Order-Klasse zuzuordnen.

Durch Hinzufügen von:

%Vor%

Der Builder hat die zugeordneten Eigenschaften aufgrund der MapInheritedProperties beibehalten, aber die Tabelle nicht erstellt, sodass alle FKs ordnungsgemäß erstellt wurden.

Ich gehe davon aus, dass Sie separate Tabellen für jede Ihrer Klassen haben möchten, wie den obigen Beitrag, und Ihre abstrakte Tabelle nicht zuordnen.

Gesamtes Modell:

%Vor%

Erstellte Datenbank:

Hoffe, das hilft.

    
Mark Oreta 22.08.2012, 03:18
quelle
0

Ich werde hier raten, als ich einen ungewöhnlichen Fehler in einem Blog sah, den Julie Lermann mit ef4.1 gemacht hat Der Namespace in der Abfrage verursachte ein Problem.

Um schnell zu testen, ob dieser Fehler Ihr Problem ist, ändern Sie den Namespace aller Objekte so, dass sie identisch sind.      Namespace xyz // wie dbcontext und and entities     Öffentliche Klasse OtherClass {}

Schneller Test. Wenn es nicht ist, sorry für das Verschwenden Ihrer Zeit.

    
phil soady 22.08.2012 14:46
quelle